logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Mai 21

Comparando ASP.net WebForms e ASP.net MVC

Escrito por Vinícius Sandim em .NET, 1, 2.0, 3.5, 3d, 3g, 4, 6, action, Ajax, app, AR, Arquitetura, Asp.Net, back, Banco de Dados, BI, browser, C#, C#.net, class, classe, classes, cliente, código, código fonte, comparação, Componente, Componentes, control, CRUD, css, dados, Desktop, developer, Download, Drag And Drop, err, event, Exemplos, explorer, Ferramenta, Flex, fonte, for, framework, function, gae, gc, html, ide, IE, if, int, Java, Javascript, JQuery, Links, lista, map, menu, mg, mtv, mvc, O, on, Partilha, Pessoal, portal, Projetos, pt, RIA, Ria’s Geral, S+S, server, site, SQL Server, state, tag, TAT, template, tv, UI, uint, UX, Visual Studio, vs, web, xhtml, XML, XP @ 05 21st, 2011 | via http://www.viniciussandim.com | 1 comentário
Vinícius Sandim
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Eu confesso que nunca me interessei em desenvolver sites e muito menos aplicações web utilizando ASP.net, sempre achei que a metodologia “drag and drop” que o Web Forms nos proporciona não funciona legal na web, pois ela gera muito “lixo” para o navegador, e isso é crucial em uma WebAPP.

Portanto, desde que migrei de desktop (Delphi 7) para web, tenho trabalhado com o nosso querido Flex no Front End e o C#.net no Back End. Mas desde que o ASP.net MVC foi lançado, tenho acompanhado de perto a sua evolução, e confesso que ele tem me agradado bastante.

Para não perder o costume, venho hoje compartilhar com vocês um pouco do que tenho estudado, este post faz uma comparação de um projeto idêntico criado usando as duas metodologias.

Então chega de conversa e vamos ao que interessa:

As ferramentas que utilizei para criar os projetos foram:
• SQL Server 2008 Express
• Visual Web Developer Express 2010
• Framework ASP.net MVC 2.0

O projeto acessa uma base de dados com apenas uma tabela, com a seguinte estrutura:

Tabela

Não utilizei nenhum framework ORM, fiz o mapeamento das entidades manualmente, usando as classes nativas do Framework. (SqlConnection, SqlCommand e SqlDataReader).

Quando criei os projetos, utilizei os templates do prório Visual Web Developer:

CriandoProjeto

Para o projeto Web Forms, usei ASP.NET Web Application.
Para o projeto MVC usei: ASP.NET MVC 2 Web Application.

É claro que não vou fazer um passo a passo de como criar o projeto, o foco deste post não é isso, mas depois de pronto, nosso Solution Explorer do projeto WebForms ficará assim:

SolutionForms

Já o projeto MVC, tem uma estrutura um pouco maior, porque ele trabalha completamente “tipado”, temos as classes Model, Controller e View, como manda o figurino:

SolutionMVC

Certo, agora vamos ao objetivo, quando executo o projeto WebForms e acesso a página de clientes, o Framework gera este código HTML:

"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"http://www.w3.org/1999/xhtml" xml:lang="en">


"../Styles/Site.css" rel="stylesheet" type="text/css" />
"post" action="default.aspx" id="ctl01">
class="aspNetHidden"> "hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> "hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> "hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="ZhpEPEbRGaEf3wxNFvEkKLAz6ze4Y1776/kxLQ+oQoJx5Ew6ZrkBOLulNNEfu2T+c9uFRH7RTl5UUrZ3A1gK1BMKQc174Sha+0Wt5wmfhTKcGIb1YUgfoyjwcO8TYaR3U3o3l/07IemJNiwmeH8cM7BzSKkWiBTRuwjyI6u7VHlH7TyWLCMw0bneQ8edbb2YBMnGslvv7YSjWb5RdYMIjhu77ZE4CwQwK75UxHI1QZUgHjIaNP7MrZpoxi+tQbCBVW9Lc3jZCq0gbouSkWw7epm9WZknpiH5T68BTGirDfP4BfUZygsyB6aHmrpdN47pKJz7kFH78soAuE4Yd1NWNk9mHK+6ErcoVe3EkH8ycfXm51UwzkwNp2XRdr2s2AANsWpDdxNhyDTo2Mia2/YrPGirUzqV62RWlVWpS/KBwBpdtSLlYVnLaU6eJyjrJhqXxKzTa8b3F1av8h40cX5teT+0odXAWB3E2GcrE9XGfwa1ACk5QQlFsh+UplF/dEuzes6UBjJd9LQS7kPVabfzs/y8L3BRsK0Rtb0i1unXfHMuq3eVg/XQGnwb9uEhL5EdHjniskkoUzQh1T2yJfPwajrjxU06M5Ba43Soj8pk03isqi4tBqBllPVkv13Hyz8eapd85VejaO+3CUqXVr3J9/3MvZWjNcA2QOef7H4xKmtVExbxingFQqj5K5appmJReVczk8/HLCOnLD+Wa5/7CKWTj/OucQgIgPYnGEpzMZUlKJZFLAeFfwwkR2XVZcyyCoYWjK2pJX5zuCXMVkMxKCCuWjVvtl3GPfUkz1nsgP/Jtyq7vSdiXdGE/qxV8yRGJN5h4MlvVOfYq2gKspcNIZzwCzVCidhdoY8SYjnz+qyIXmXxXD3VkF2XGbcId86i/qOkwOyk9UcAS8iR+Es/MkQg7WximaQQji+o67grOaE=" />
class="aspNetHidden"> "hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" /> "hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE" value="J0z-AYjFMhWT0kpqMD21gr0HoEKRmyw5_w3a37YYi27BAPn9DepNebG_20nPZ-VajOl1_KCPnab6uApAzjeQe7rOkN95u7baMYMKLA59Jpw1" /> "hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="IRcnHy6RQ1JCPCa5l/6k5JvtDNRbcbaJH7wDUCh/MVtgwLHo5W/iwGkTGRYeZHjYgqrWjjGjzZQvt+FJuMho2GE+Qf3syKzyeGXquF9a/Ws577KUO6oFdTWrhmsBXMMh" />
class="page">
class="header">
class="title">

My ASP.NET Application

class="loginDisplay"> [ "../Account/Login.aspx" id="HeadLoginView_HeadLoginStatus">Log In ]
class="clear hideSkiplink"> "#NavigationMenu_SkipLink"><span"Skip Navigation Links" src="/WebResource.axd?d=xFBnuqKYnqgWTzzLZBOde45ezhDnXgdvOgtOQCvZwJw6xfKBic_vxFOBRotUqhEobwKQWWgbNXfNYvZsldu9uZj6j6aYf49eocT9vsEpgtM1&t=634356288728593750" width="0" height="0" style="border-width:0px;" />
class="menu" id="NavigationMenu">
    class="level1">
  • class="level1" href="../Default.aspx">Home
  • class="level1" href="../About.aspx">About
"NavigationMenu_SkipLink">
class="main"> Listagem Completa de Clientes
"0" rules="all" border="1" id="MainContent_GridView1" style="border-collapse:collapse;">
"col">Id_Cliente "col">Nome "col">CPF "col">RG "col">Idade "col"> "col">
17 Jo?o 123.123.123-12 12.312.123-1 30 "Edita.aspx?Id_Cliente=17">Editar "return confirm('Tem certeza?');" id="MainContent_GridView1_LinkButton1_0" href="javascript:__doPostBack('ctl00$MainContent$GridView1$ctl02$LinkButton1','')">Excluir
19 Jos? 444.444.444-44 44.444.444-4 21 "Edita.aspx?Id_Cliente=19">Editar "return confirm('Tem certeza?');" id="MainContent_GridView1_LinkButton1_1" href="javascript:__doPostBack('ctl00$MainContent$GridView1$ctl03$LinkButton1','')">Excluir
18 Maria 999.999.999-99 99.999.999-9 35 "Edita.aspx?Id_Cliente=18">Editar "return confirm('Tem certeza?');" id="MainContent_GridView1_LinkButton1_2" href="javascript:__doPostBack('ctl00$MainContent$GridView1$ctl04$LinkButton1','')">Excluir
"submit" name="ctl00$MainContent$btnInserir" value="Inserir novo cliente" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$btnInserir", "", false, "", "Insere.aspx", false, false))" id="MainContent_btnInserir" />
class="clear">
class="footer">

Dêem uma olhada em quanto código os componentes criam. É muita coisa, imaginem isso em um grande portal? Americanas.com gerando este código? Meio inviável não? Aproveito para destacar o código gerado pelo ViewState, herói e vilão do Web Forms.

Agora vamos comparar a mesma página gerada pelo projeto MVC:

"-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"http://www.w3.org/1999/xhtml">

    Index


"Content/Site.css" rel="stylesheet" type="text/css" />


class="page">
"header">
"title">

My MVC Application

"logindisplay"> [ "/Account/LogOn">Log On ]
"menucontainer">
    "menu">
  • "/">Home
  • "/Home/About">About
"main">

Listagem completa de clientes:

Código Nome CPF RG Idade
30 Jo?o 123.123.123-12 12.312.123-1 30 "/Cliente/Edit?Id_Cliente=30">Editar | "/Cliente/Delete?Id_Cliente=30" onclick="return confirm('Tem certeza?');">Excluir |
32 Jos? 444.444.444-44 44.444.444-4 21 "/Cliente/Edit?Id_Cliente=32">Editar | "/Cliente/Delete?Id_Cliente=32" onclick="return confirm('Tem certeza?');">Excluir |
31 Maria 999.999.999-99 99.999.999-9 35 "/Cliente/Edit?Id_Cliente=31">Editar | "/Cliente/Delete?Id_Cliente=31" onclick="return confirm('Tem certeza?');">Excluir |
"/Cliente/Create">Novo cliente...
"footer">

O que acham? As duas páginas fazem exatamente a mesma coisa, no entato o MVC gera beeeem menos código.

Bom pessoal, essa é apenas uma das vantagens do MVC, posso destacar outras:

  • Controle total do código que será enviado ao navegador;
  • Arquitetura em camadas, códigos completamente separados;
  • Classes que auxiliam a geração do HTML para o browser de acordo com as ações do Controlador, sem lixo!;
  • Facilidade de se implementar Ajax (de verdade) no seu projeto.
  • Integração com o Jquery usando classes do Framework;

Bom é isso, vou me despedindo, mas antes deixo o código fonte dos dois projetos disponíveis para download.

Mai 13

JavaScriptMVC

Escrito por Fábio Batista da Silva em 1, 2.0, 6, action, Ajax, Aplicativos, app, AR, back, backend, BI, C#, class, classe, classes, código, Componente, Componentes, configuração, control, CRUD, css, dados, demo, Desenvolvimento, Design Patterns, development, Dica, dispatchEvent, Download, email, err, erro, error, Estilo, event, Evento, Eventos, Ferramenta, Flex, fonte, for, Formulário, formulario de contato, framework, function, gestão, git, Google, html, html5, IE, if, image, int, Java, Javascript, JQuery, label, labs, lista, map, mg, mvc, O, on, padrão, PHP, Plugin, pt, rails, RIA, Ria’s Geral, RoR, S+S, serviço, Serviços, string, tag, TAT, Tecnologia, template, Teste, tv, UI, uint, update, UX, web @ 05 13th, 2011 | via http://www.flexria.com.br/home | Sem comentários
Fábio Batista da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá,

Com a chegada eminente do HTML5 e outras tecnologias baseadas em javascript como MongoDB e node.js
tenho deixado o Flex o meio de lado e me dedicado um pouco mais ao javascript.
Porem fica a questão, Como ter um front-end com a mesma performance, escalabilidade e desacoplamento que o flex permite ?
Realmente nesses termos ainda não encontrei nada que me proporcione o que o Flex proporciona.

Nesse Post vou falar um pouco sobre Framework JavaScriptMVC
Me perece uma das melhores alternativas para manter um frond-end JavaScript/HTML

JavaScriptMVC é formado por uma seria de ferramentas para construção de aplicativos JavaScript e consiste nos seguintes componentes:

  • StealJS -Gestão de Dependência
  • FuncUnit – Testes Unitários
  • jQueryMX – Biblioteca de Componentes
  • DocumentJS – Geração de JSDoc

O JavaScriptMVC pode ser utilizado com qualquer back-end , java,php,rails, etc…
Ele pode ser instalado baixando diretamente aqui ou instalando cada componente individualmente atreves do github.

Os componentes devem ficar nas raiz do diretório web da sua aplicação, nesse caso a pasta public.
Então as estrutura da aplicação fica assim.

public
  /documentjs
  /funcunit
  /jquery
  /steal
  /js

O JavaScriptMVC tem ferramentas de geração de código para auxiliar na criação da aplicação.
Vamos começar criando a aplicação pelo terminal, então o JavaScriptMVC vai gerar toda a estrutura do projeto.

    cd path-to-application/public/
   ./js jquery/generate/app contacts

Assim como o rails o JavaScriptMVC possui scaffolds que podem gerar seu CRUD.
Para isso basta executar o comando scaffold passando como parâmetro o nome do modelo.
Os nomes das classes seguem o seguinte padrão : ..
então temos o model “Contacts.Models.Contact”

     ./js jquery/generate/scaffold Contacts.Models.Contact

O JavaScriptMVC vai gerar o controlador, modelos, views e testes unitários da aplicação.
Porem o único arquivo que sera incluído na aplicação é o steal.js ele é responsável por gerenciar as dependências da aplicação.
No ambiente de desenvolvimento ele vai incluir individualmente todos os controladores, modelos, etc..

 type='text/javascript'  src='../steal/steal.js?contacts,development'>>

O parâmetro “?contacts” na tag de inclusão indica o nome do arquivo de configuração que tem o mesmo nome da aplicação nesse caso contacts.js
nele ficam mapeados todas dependências do projeto que serão gerenciadas pelo StealJS
contacts/contacts.js – Arquivo de configuração

steal.plugins(
    'jquery/controller',
    'jquery/controller/subscribe',
    'jquery/view/ejs',
    'jquery/controller/view',
    'jquery/model',
    'jquery/lang/json',
    'jquery/dom/form_params')

.css('contacts')

.resources()
.models('contact')
.controllers('contact')
.views();

Depois de fazer uma refatoração a aplicação ficou assim :

contacts/view/contact/contacts.html – Tela inicial da aplicação

>
    >
        >JS - MVC>
         type='text/javascript'  src='../steal/steal.production.js?contacts'>>
    >
    >
        
 id='contacts'>
            
>Contacts>
            
 id='contact'>>
        >
    >
>

contacts/view/contact/list_view.ejs – Template para a listagem de contatos


 class="link">
     href="javascript://" class='text_button create' >Create>
    
/>
>

 class="table">
    
>
        
>
            
>Name>
            
>E-Mail>
            
> >
        >
    >
    
>
        <%for(var i = 0; i < contacts.length ; i++)%>
        
 <%= contacts[i]%>>
            
><%= contacts[i].name%>>
            
><%= contacts[i].email%>>
            
 class="last">
                 href='javascript://' class='edit'>edit>%>
    >
>

contacts/view/contact/list_view.ejs – Template para o formulario de contatos


 <%= contact%> >
    
 action="#" class="form">
        
>
             class="label">Name>
            
 type="text" class="text_field" id="name" name="name" value="<%= contact.name%>" />
             class="label">E-Mail>
            
 type="text" class="text_field" id="email" name="email" value="<%= contact.email%>" />
        >
        
 class="link">
             href="javascript://" class="text_button save">Save>
             href="javascript://" class="text_button cancel">Cancel>
        >
    >
>

contacts/models/contact.js – Classe ‘Contacts.Models.Contact’ Reponsavel pela abstração do acesso aos serviços

$.Model.extend('Application.Models.Contact',
/* @Static */

    /**
     * Service url.
     */
    url: 'http://localhost/patho-to-app/contacts/',

    /**
     * Recupera os dados dos contacts do serviço no backend.
     * @param Object params
     * @param Function success
     * @param Function error
     */
    findAll: function( params, success, error )
        $.ajax(
            url     : this.url,
            type    : 'get',
            dataType: 'json',
            data    : params,
            success : this.callback(['wrapMany',success]),
            error   : error
        );
    },
    /**
     * Cria um novo contacto
     * @param Object attrs
     * @param Function success
     * @param Function error
     */
    create: function( attrs, success, error )
        $.ajax(
            url     : this.url + 'save',
            type    : 'post',
            dataType: 'json',
            error   : error,
            success : success,
            data    : contact:attrs
        });
    }
    /**
     * Altera os dados de um contacto
     * @param String id
     * @param Object attrs
     * @param Function success
     * @param Function error
    */
    update: function( id, attrs, success, error )
        $.ajax(
            url     : this.url + 'save',
            type    : 'post',
            dataType: 'json',
            data    : contact:attrs,
            success : success,
            error   : error
        });
    },
    /**
     * Remove um contacto
     * @param String id
     * @param Function success
     * @param Function error
     */
    destroy: function( id, success, error )
        $.ajax(
            url     : this.url + 'destroy/id/'+id,
            type    : 'post',
            dataType: 'json',
            error   : error,
            success : success
        );
    },
},
);

contacts/controllers/contact_controller.js – Classe ‘Contacts.Controllers.Contact’ Responde a eventos da view e do modelo

$.Controller.extend('Contacts.Controllers.Contact',onDocument: true,

     /**
     * Função chamada quando a página é carregada
     */
     load: function()
        this.findAll();
     ,

     /**
     * Função que renderiza a listagem de contatos apartir do template /contacts/views/list_view.ejs
     * @param Array contacts
     */
     listView: function( contacts )
        $('#contact').html(this.view('list_view', contacts:contacts ));
     },

     /**
     * Função que renderiza o formulario de contatos apartir do template /contacts/views/form_view.ejs
     * @param Contacts.Models.Contact contact
     */
     formView: function(contact)
        $('#contact').html(this.view('form_view', contact:contact));
     },

     /**
     * Função que lista os contatos atraves do model e renderiza a tela quando obtem resultado
     */
     findAll: function(){
        Contacts.Models.Contact.findAll(, this.callback('listView'));
     },

    /**
     * Listener para o evento 'click' no link create
     */
    '.create click': function()
        // cria um novo contato e monta o formulario
        var contact = new Contacts.Models.Contact();
        this.formView(contact);
    ,

     /**
     * Listener para o evento 'click' no link edit
     * @param jQuery el
     */
    '.edit click': function( el )
        // Recupera o contato selecionado e monta o formulario
        var contact = el.closest('.contact').model();
        this.formView(contact);
    ,

     /**
     * Listener para o evento 'click' no link destroy
     * @param jQuery el
     */
    '.destroy click': function( el )
        if(confirm("Are you sure you want to destroy?"))
            // Recupera o contato selecionado e o remove
            var contact = el.closest('.contact').model();
            contact.destroy();
        
     },

    /**
     * Listener para o evento 'click' no link save
     * @param jQuery el
     */
    '.save click': function(el)
        // Recupera o contato selecionado
        var contact = el.closest('.contact').model();
        // Recupera os dados do formulario
        var attrs   = $('.form').formParams();
        // Atualiza os dados no "objeto"
        contact.attrs(attrs);
        // Salva
        contact.save();      	// a função save é erdada do objeto Model
                               // ela verifica se o objeto ja existe e chama o metodo create ou update
    ,

    /**
     * Listener para o evento 'click' no link cancel
     */
    '.cancel click': function()
        this.findAll();
    ,

    /**
     * Listener para o evento 'created' disparado pelo "objeto" Contacts.Models.Contact
     * @param String called
     * @param Event contact
     */
    'contact.created subscribe': function( called, contact )
        this.findAll();
    ,

    /**
     * Listener para o evento 'updated' disparado pelo "objeto" Contacts.Models.Contact
     * @param String called
     * @param Event contact
     */
    'contact.updated subscribe': function( called, contact )
        this.findAll();
    ,

     /**
     * Listener para o evento 'destroyed' disparado pelo "objeto" Contacts.Models.Contact
     * @param String called
     * @param Event contact
     */
    "contact.destroyed subscribe": function(called, contact)
        this.findAll();
     
});

Agora antes de colocar a aplicação em ambiente de produção podemos compactar todos os arquivos .js e .css gerando uma versão final.

 ./js contacts/scripts/build.js

O StealJS utiliza o Google Closure para compactar todos os arquivos
e gerar arquivos compactados/concatenados que serão usados em produção contacts/production.js e contacts/production.css .

Com isso reduzimos todos os arquivos da aplicação, estilos, plugins, etc.. são reduzidos a apenas um arquivo .js e um arquivo .css.
E para mudar as configuração do ambiente temos apelas que mudar o tag de inclusão do StealJS

<script type='text/javascript'  src='../steal/steal.production.js?contacts'>script>

Esse foi apenas uma pequena amostra do JavaScriptMVC.
Com essa estrutura ele nos permite construir grandes aplicações de forma modular
com um bom ambiente de teste, velocidade no desenvolvimento e performance no ambiente de produção.

Essa aplicação esta rodando aqui : http://flexria.com.br/labs/js-mvc/
E os fontes estão disponíveis no github : https://github.com/FabioBatSilva/js-mvc

Abraço e até a próxima…. ;-)

Fev 25

Two-way Data Binding – Flex 4

Escrito por DClick Team em 1, 2009, 4, 6, action, Actionscript, Adobe, app, AR, back, BI, blog, carregar, código, CRUD, Data Binding, demo, exemplo, Flex, Flex 3, Flex 4, fonte, for, function, ide, IE, if, int, label, layout, library, Linha de Código, MXML, novidade, Novidades, O, on, pt, RIA, Ria’s Geral, spark, string, TAT, TextInput, Twitter, Two-way Data Binding, UI, uint, XML @ 02 25th, 2011 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Two-way data binding é uma das novidades do flex 4 e para quem não conhece, vou mostrar como funciona e o que mudou em relação ao Flex 3.

No Flex 3 tinhamos data binding de apenas uma via, como mostra o exemplo abaixo:

PLAIN TEXT
ACTIONSCRIPT:

  1. “tiValor1″/>
  2. “tiValor2″ text=“{tiValor1.text}”/>

Nesse exemplo, caso o valor da caixa de texto do tiValor1 mudasse, o valor da caixa de texto do tiValor2 seria alterado também, porém, se o valor da caixa tiValor2 fosse alterado, nada seria refletido a caixa de texto tiValor1.

No Flex 4 temos data binding de duas vias, como mostra o exemplo:

PLAIN TEXT
ACTIONSCRIPT:

  1. “tiValor1″/>
  2. “tiValor2″ text=“@{tiValor1.text}”/>

Nesse exemplo notamos que a anotação “@” foi colocada antes do meu código “{tiValor1.text}”, essa anotação identifica um data binding de duas vias. O resultado desse exemplo é: Caso eu altere o texto da caixa de texto tiValor1, ele será refletido na caixa de texto tiValor2, e vice-versa.

Obviamente esse exemplo da funcionalidade é muito básico e serve apenas para demonstrar a funcionalidade, logo vou apresentar uma situação real que acontece a todo momento em qualquer aplicação.

Para o nosso exemplo real, vou utilizar uma situação comum para qualquer tipo de aplicação, o CRUD. Para todo CRUD precisamos sempre fazer essas 3 operações:
1. Mostrar o objeto carregado do back-end nas caixas de texto. (Famoso método carregaObjeto)
2. Atualizar o objeto com os novos valores das caixas de texto. (Famoso método preencherObjeto)
3. Limpar as caixas de textos. (Famoso método limpar)

No flex 3 teriamos o seguinte cenário.
Para a situação 1:
caixaDeTexto.text = Objeto.valor;
Para a situação 2:
Objeto.valor = caixaDeTexto.text;
Para a situação 3:
caixaDeTexto.text = “”;

Para quem usava o data binding do flex 3 de uma forma correta, conseguia resolver uma das situações com ele, mas nas outras situações sempre acabava escrevendo a linha de código apresentada.

No flex 4 poderiamos resolver da seguinte forma:

PLAIN TEXT
ACTIONSCRIPT:

  1. “caixaDeTexto” text=“@{Objeto.valor}”/>

Com essa simples mudança, nós evitaríamos todas as situações acima, dispensando os métodos de carregarObjeto, preencherObjeto e limpar objeto.

Veja o exemplo funcional abaixo:

Fonte:

PLAIN TEXT
ACTIONSCRIPT:

  1. xml version=“1.0″ encoding=“utf-8″?>
  2. “http://ns.adobe.com/mxml/2009″
  3. ? ? ? ? ? ?? ? xmlns:s=“library://ns.adobe.com/flex/spark” maxHeight=“400″ maxWidth=“600″
  4. ? ? ? ? ? ?? ? xmlns:mx=“library://ns.adobe.com/flex/mx” width=“600″ height=“400″ xmlns:local=“*”>
  5. ? ?
  6. ? ? ? ? “user”>
  7. ? ? ? ? ? ? 1
  8. ? ? ? ? ? ? Bruno Sales
  9. ? ? ? ? ? ? São Paulo
  10. ? ? ? ?
  11. ? ?
  12. ? ?
  13. ? ?
  14. ? ? ? ? [CDATA[
  15. ? ? ? ? ? ? private function recarregar():void
  16. ? ? ? ? ? ? {
  17. ? ? ? ? ? ? ? ? user = new User("1", "Bruno Sales", "São Paulo");
  18. ? ? ? ? ? ? }
  19. ? ? ? ? ]]>
  20. ? ?
  21. ? ?
  22. ? ?
  23. ? ? ? ? “middle” horizontalAlign=“center”/>
  24. ? ?
  25. ? ?
  26. ? ? “Form” width=“250″ height=“180″>
  27. ? ? ? ?
  28. ? ? ? ? ? ? “Id”>
  29. ? ? ? ? ? ? ? ? “tiValor1″ text=“@{user.id}” maxChars=“20″/>
  30. ? ? ? ? ? ?
  31. ? ? ? ? ? ? “Nome”>
  32. ? ? ? ? ? ? ? ? “tiValor2″ text=“@{user.nome}” maxChars=“20″/>
  33. ? ? ? ? ? ?
  34. ? ? ? ? ? ? “Cidade”>
  35. ? ? ? ? ? ? ? ? “tiValor3″ text=“@{user.cidade}” maxChars=“20″/>
  36. ? ? ? ? ? ?
  37. ? ? ? ? ? ? “right”>
  38. ? ? ? ? ? ? ? ? Button label=“Limpar” click=“user = new User()”/>
  39. ? ? ? ? ? ?
  40. ? ? ? ?
  41. ? ?
  42. ? ?
  43. ? ? “Objeto User” width=“300″ height=“180″>
  44. ? ? ? ?
  45. ? ? ? ? ? ? “middle” horizontalAlign=“center”/>
  46. ? ? ? ?
  47. ? ? ? ? “label” text=“{user.toString()}”/>
  48. ? ? ? ? Button label=“Recarregar Objeto” click=“recarregar()”/>
  49. ? ?
  50. ?
Jan 29

Trabalhando com SQLite em aplicações Flex Mobile (android) usando o Flash Builder Burrito

Escrito por Willian Mano em .NET, 1, 2.0, 4, 6, Air, Android, aplicacao, aplicaçoes, app, AR, arte, Artigo, auto, Banco de Dados, BI, blog, botão, C#, case, class, classe, código, código fonte, Componente, Componentes, CRUD, dados, Desenvolvimento, Download, DRE, email, event, Evento, flash, flash builder, Flex, fonte, for, function, IE, if, image, imasters, int, lite, mg, mobile, O, on, pt, redeRIA, RIA, Ria’s Geral, S+S, screen, Screencast, screencasts, site, SQLite, state, Sun, TAT, Teste, Tutoriais, Tutorial, Twitter, UI, uint, update, XP @ 01 29th, 2011 | via http://blog.willianmano.eti.br/ | Sem comentários
Willian Mano
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Depois de muito tempo fora dos palcos estou de volta, dessa vez com uma série de tutoriais focados principalmente no desenvolvimento de aplicações para android utilizando o flash builder burrito.

Neste primeiro tutorial eu irei mostrar como criar algumas operações do CRUD em uma aplicação android utilizando um banco de dados local, neste caso o SQLITE. Não vou explicar como criar um novo projeto ou mesmo os componentes de uma aplicação android, para isso assista aos screencasts no site do Igor costa e também no blog da dclick.

Primeiramente vamos criar no nosso arquivo principal a conexão com o banco e também a criação de uma tabela.


protected function createDb():void 

var sqlConnection:SQLConnection = new SQLConnection();

sqlConnection.open(File.applicationStorageDirectory.resolvePath("testeDb.sqlite"));

var stmt:SQLStatement = new SQLStatement();

stmt.sqlConnection = sqlConnection;

stmt.text = "CREATE TABLE IF NOT EXISTS contatos (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
"nome VARCHAR(200) NOT NULL," +
"telefone VARCHAR(45) NOT NULL," +
"email VARCHAR(200) DEFAULT NULL)";

stmt.execute();

A função createDb é executada na método initialize da aplicação.
A variável sqlConnection na linha 3 é responsável pela conexão.
Na linha 5 é criado o arquivo SQLite para a aplicação
Na linha 7 a varável stmt é responsável pelas instruções SQLite.
É criada a conexão na linha 9.
Na linha 11 é a instrução SQLite que será executada, nesse caso a criação da tabela na nossa base testeDb.sqlite.
Na linha 17 é executada a instrução SQLite da linha 11.

Pronto, depois da tabela criada vamos criar a nossa view para poder cadastrar dados nela.

A função para salvar os dados é bem simples. Adicione um evento para o clique do botão e nele adicione o seguinte código.


var sqlConnection:SQLConnection = new SQLConnection();
sqlConnection.open(File.applicationStorageDirectory.resolvePath("testeDb.sqlite"));

var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = sqlConnection;

stmt.text = "INSERT INTO contatos (nome, telefone, email) VALUES" +
"('" + txiNome.text + "', '" + txiTelefone.text + "', '" + txiEmail.text + "')";

stmt.execute();

navigator.popView();

Bom para quem já desenvolveu alguma app em Air utilizando o SQLite percebe que a conexão é feita da mesma forma. Se você deseja melhorar seu código (assim como eu) sugiro a leitura do post do Andre Casertano no site da Imasters. Ele mostra como criar uma classe de conexão com o SQLite e também explica um pouco melhor sobre como é feita essa conexão no primeiro posto sobre o assunto.

No código fonte eu coloquei também as operações de update e delete. Esta bastante simples. No próximo post eu prometo melhorar um pouco… =D

Download do fonte.

Post to Twitter

Jan 29

Resolvendo problemas com Rails, RVM, openssl e readline no Ubuntu

Escrito por Elvis Fernandes em 1, 2009, 4, 6, aplicacao, app, AR, arte, BI, checkBox, checkboxes, configuração, CRUD, Desenvolvimento, Dica, DRE, err, erro, error, exemplo, for, habtm, IE, instalação, int, Introdução, live, NaN, O, on, permalink, problema, problemas, pt, rails, rest, restfulx, RIA, Ria’s Geral, RoR, ruby, ruby on rails, screen, Screencast, site, ssl, tag, UI, uint, update, XML @ 01 29th, 2011 | via http://www.elvis.eti.br | Sem comentários
Elvis Fernandes
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Se você está começando a trabalhar com RVM no Ubuntu, pode encontrar alguns problemas de configuração quando tentar executar o script/console (Rails 2.x), como por exemplo:

no such file to load -- readline (LoadError)

ou ainda

no such file to load -- openssl (LoadError)

O site oficial do RVM oferece uma solução, mas que não se aplica a todos os ambientes.

Para resolver esse problema é necessário fazer o seguinte:

1) Instale as bibliotecas do openssl e do readline via apt:

$ sudo apt-get install libreadline6 libreadline6-dev openssl libssl0.9.8 libssl-dev libopenssl-ruby

2) Remova a versão instalada do Ruby via RVM e reinstale indicando os diretórios do readline e do openssl:

$ cd 
$ rvm remove 1.8.7
$ rvm install 1.8.7 --with-readline-dir=/usr/include/readline/ --with-openssl-dir=/usr/include/openssl/

Este exemplo aplica-se à versão 1.8.7 do Ruby no Ubuntu 10. Faça as adaptações necessárias para adequar ao seu ambiente. Esta solução foi testada com a versão 2.3.10 do Rails – acredito que pode ser aplicada a outras versões também.

Funcionou com você em outras configurações? Deixe um comentário!

Posts relacionados

  • Instalando sua aplicação Rails/RestfulX (e as gems) na DreamHost Installing your Rails/RestfulX app (and its gems) at Dreamhost“>Instalando sua aplicação Rails/RestfulX (e as gems) na DreamHost Installing your Rails/RestfulX app (and its gems) at Dreamhost (2)
  • CRUD com o RestfulX – aplicação funcionandoCRUD with RestfulX – live application“>CRUD com o RestfulX – aplicação funcionandoCRUD with RestfulX – live application (2)
  • CRUD com o RestfulX: Parte 2/2 – Create, Update e DeleteCRUD with RestfulX: Part 2/2 – Create, Update, and Delete“>CRUD com o RestfulX: Parte 2/2 – Create, Update e DeleteCRUD with RestfulX: Part 2/2 – Create, Update, and Delete (2)
  • Instalação “avançada” do RestfulX no seu projeto Rails“Advanced” installation of RestfulX into your Rails app“>Instalação “avançada” do RestfulX no seu projeto Rails“Advanced” installation of RestfulX into your Rails app (0)
  • Introdução ao RestfulXIntroduction to RestfulX“>Introdução ao RestfulXIntroduction to RestfulX (0)
  • Screencast: desenvolvendo uma aplicação com RestfulX em menos de 5 minutos“>Screencast: desenvolvendo uma aplicação com RestfulX em menos de 5 minutos (8)
  • Usando checkboxes em uma relação habtm no Rails“>Usando checkboxes em uma relação habtm no Rails (6)
  • Instalando o Rails 2 no Debian“>Instalando o Rails 2 no Debian (3)
  • Criando XML no Rails com caracteres acentuados“>Criando XML no Rails com caracteres acentuados (0)
  • RestfulX – Introdução, instalação, configuração e primera aplicação em 5 minutos“>RestfulX – Introdução, instalação, configuração e primera aplicação em 5 minutos (16)

© Elvis for Elvis Fernandes, 2011. |
Permalink |
Nenhum comentário |
Adicione ao
del.icio.us


Tags: openssl, Rails, readline, ruby on rails, rvm, ubuntu

Nov 8

Cadastro de Interesse Dominando Flex e Java

Escrito por Daniel Schmitz em 1, 4, 6, AR, BI, Blazeds, class, cool, CRUD, Eclipse, email, err, Flex, for, Formulário, Hibernate, IE, if, image, int, Introdução, Java, Livro, Livros, Messaging, mg, mysql, NaN, O, on, relatório, Relatórios, RIA, Ria’s Geral, RTM, RTMP, Spring, Tecnologia, UI @ 11 8th, 2010 | via http://flex.etc.br | 1 comentário
Daniel Schmitz
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

O livro Dominando Flex e Java está muito perto de ser lançado! Você tem interesse na sua compra?? Preencha este pequeno formulário para receber em seu email uma oferta exclusiva, no dia de lançamento da obra:

http://bit.ly/CadastroFlexJava

 

Algumas informações sobre o livro:

  • Quantidade de páginas: 256
  • Principais Tecnologias abordadas
    • Flex
    • Java
    • Eclipse
    • MySql
    • JBoss
    • Tomcat
    • Blazeds
    • Spring
    • Hibernate
    • RTMP (Messaging)
    • JasperReports e iReports
  • Requisitos
    • Saber programar
    • Não é mostrado o que é if, for, essas coisas…
  • Capítulos
    • 1) Introdução
    • 2) Preparando o ambiente
    • 3) BlazeDS
    • 4) CRUD com Flex e Java
    • 5) Spring e Hibernate
    • 6) Criando um sistama real
    • 7) Criando aplicações RMTP
    • 8) Relatórios

Sumário completo: http://dl.dropbox.com/u/6740457/flex-java/Sumario-Livro-Dominando-Flex-Java.pdf

Set 29

Como foi o 1º #DevDay Curitiba

Escrito por Igor Musardo em .NET, 1, 4, 6, Adobe, Adobe Flex, Air, AR, Arquitetura, Asp.Net, Banco de Dados, BI, break, business, control, Controls, CRUD, css, Curitiba, dados, demo, Desenvolvedor, desenvolvedores, event, Evento, Excel, exemplo, Flex, for, geo, ide, IE, int, internet, JQuery, mg, Microsoft, Motivação, mvc, O, on, padrão, Palestra, Palestras, rest, RIA, Ria’s Geral, server, silverlight, Software, tag, TAT, Tech, TechEd, Tecnologia, UI, Vários, Ved, Visual Studio, WCF, web, window, windows, WPF, XP, zend @ 09 29th, 2010 | via http://www.igormusardo.com.br | Sem comentários
Igor Musardo
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Sensacional!

É o melhor adjetivo para descrever como foi o 1º DevDay Curitiba, neste último sábado (25/09), tivemos um dia intenso de imersão em tecnologia Microsoft com palestrantes de altíssimo nível. Quase todos os palestrantes são MVP’s e palestraram esse ano no TechEd, maior evento organizado pela Microsoft na América Latina.

O auditório estava cheio de desenvolvedores ávidos pelo conteúdo das palestras.

O Thiago Zavaschi começou a maratona de palestras falando sobre Business Inteligence com dados Geoespaciais. Uma excelente palestra, com várias demos claras e simples!

Depois foi a minha vez de dar continuidade à imersão, contei como comecei a minha caminhada na plataforma Flex, e como aconteceu o meu primeiro contato com o WPF e Silverlight e principalmente como foi que eu abri os olhos para o Silverlight como uma plataforma realmente interessante para aplicações ricas de internet. Ao final da palestra fiz a demo de um aplicativo CRUD em Silverlight com WCF RIA Services do zero, incluindo a criação do banco de dados que você.

Tivemos uma pausa para o Coffee-break e o bate-papo.

Depois foi a vez do Djonatas Tenfen explicar para todos o que é o MVVM e quais os benefícios de se utilizar esse padrão de arquitetura em aplicações Silverlight.

Pausa para o almoço! no Mexicano!

Na volta do almoço o Rodolpho Carmo mostrou para todos como será a plataforma do Windows Phone 7 e como desenvolver um aplicativo em pouquíssimo tempo para o WP7. No final da palestra o Windows Phone 7 dançou o Ah! Muleque…

Victor Cavalcante subiu no palco logo após a palestra do Rodo e quebrou cada um dos conceitos por trás do ASP.NET WebForms comparando-o com a Matrix, pois os conceitos do WebForms simplesmente não são conceitos de Web, como por exemplo, Web não tem Estado, Web não tem Server Side Controls, etc. E nos apresentou a pílula Vermelha para conhecermos a verdade através do ASP.NET MVC + CSS + JQuery em uma palestra muito dinâmica e divertida.

E para fechar com chave de ouro o DevDay, não tinha ninguém melhor que o Giovanni Bassi. Com uma palestra extremamente provocadora, apresentando a verdade nua e crua que mexeu com vários desenvolvedores presentes fazendo-os cair na real sobre o que realmente é ser um Desenvolvedor de Software Profissional, quais as responsabilidades e obrigações de se desenvolver software! Sem dúvida foi uma palestra para a reflexão de todos.

Ao final do DevDay fizemos vários sorteios de mouse sem-fio, pen drives e uma mochila para Notebook.

Sem dúvida foi um dia sensacional!

Aguarde, pois mais DevDays virão por aí! Até o próximo…

Set 12

Como foi a 1ª aula de ASP.NET…

Escrito por Igor Musardo em .NET, 1, AR, Asp.Net, blog, control, Controles, CRUD, Curso, Cursos, Desenvolvimento, Desenvolvimento Web, Download, exemplo, Exemplos, for, Geral, IE, int, Java, Mercado, Microsoft, O, on, pt, RIA, Ria’s Geral, site, Software, Sun, Tecnologia, Tema, Treinamento, UI, Visual Studio, web @ 09 12th, 2010 | via http://www.igormusardo.com.br | Sem comentários
Igor Musardo
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

No dia 11/09/2010 foi a primeira aula de ASP.NET que ministrei para a turma de Pós-Gradução de Desenvolvimento de Sistemas Web. A turma tem em torno de 20 alunos porém muito interessada no assunto, eles que vieram do módulo de Desenvolvimento Web em Java com JSP, ficaram um espantados com a quantidade de funcionalidades que fizemos em tão pouco tempo em sala da aula.

O assunto foi uma abordagem geral de WebForms e como funcionam os controles básicos para CRUD, funcionalidade obrigatória na maioria esmagadora dos softwares desenvolvidos no mercado.

O website que montamos durante a aula vou disponiblizar aqui no blog para caso você queria aprender ASP.NET Webforms e assim como eu aprende com exemplos funcionais.

Faça o download do conteúdo desenvolvido em sala de aula.

Bons estudos!

Ago 14

Apresentando o Adobe Flex Builder 3

Escrito por Gabriel Versallini em 1, 4, 6, Access, Action Script, Adobe, app, AR, Artigo, builder 4, class, CRUD, Desenvolvimento, Download, flash, flash builder, Flash Builder 4, Flex, Flex Builder, Flex Builder 3, for, FullScreen, if, int, Mac, mudanças, MXML, O, on, PHP, print, problema, problemas, processo, pt, RIA, Ria’s Geral, screen, swf, Tutorial, UI, Vídeo, VOZ, wave, zend @ 08 14th, 2010 | via http://www.versallini.com.br | Sem comentários
Gabriel Versallini
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Fala, galera #soudev. Conseguir recuperar um vídeo antigo e acredito que vale a pena postá-lo aqui apesar da minha péssima voz. Atualmente a Adobe já lançou uma versão do Flex que passou a ser chamado de Adobe Flash Builder 4 com inúmeras mudanças, muitas pra melhor e algumas que causam problemas pra quem já tem um projeto no Flex Builder 3 e deseja migrar para o Flash Builder 4. Mas quanto essas diferenças, fica para um próximo artigo.

No próximo artigo veremos como criar um CRUD em Flex utilizando o PHP, mas fiquem tranquilos, nada de vídeo. Já estou fazendo no formato de tutorial, com print-screen das telas com o passo a passo do processo de desenvolvimento.

Um abraço

Ago 3

Criando uma aplicação WPF – Parte 3

Escrito por Alexandre Tadashi em 1, 4, 6, AR, arte, blog, Blogs, botão, C#, class, classe, collection, CRUD, dados, DRE, Entity Framework, exemplo, for, framework, geo, Geral, Google, IE, if, image, int, interface, linq, mg, O, on, padrão, pt, RIA, Ria’s Geral, silverlight, state, string, TAT, Tecnologia, Tema, template, Tutoriais, Tutorial, UI, uint, update, visao, WPF, XP @ 08 3rd, 2010 | via http://alexandretadashi.net/ | Sem comentários
Alexandre Tadashi
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Nesta terceira parte do tutorial vou criar uma Interface e uma classe que servirão de apoio para a manipulação dos dados com o Entity Framework 4, a Interface eu vou chamar de IDAO.cs , e ela será implementada pela classe ContatoDAO.cs, que vai conter os métodos CRUD da aplicação.

O objetivo dessa série de tutoriais é apresentar uma forma simples de trabalhar com o Entity Framework 4 em um projeto em camadas com WPF, utilizando o padrão MVVM, existem diversas maneiras de criar uma aplicação WPF, neste tutorial simplifiquei alguns passos para que fique mais fácil para quem está começando com a tecnologia.

Na camada de dados da aplicação, adicione uma interface chamada IDAO, para isso, clique com o botão direito do mouse no projeto Contatos.Data e em Add – New Item, em Installed Templates, selecione Visual C# Items, clique em Interface, dê o nome de IDAO.cs e adicione ao projeto.

clique na foto para ampliar

Esta interface servirá de contrato para que a classe ContatoDAO.cs implemente todos os métodos CRUD .

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace Contatos.Data{    public interface IDAO< T >    {        T Add(T pEntity);        void Delete(T pEntity);        void Update(T pEntity);        IQueryable GetAll();

    }}

Neste exemplo o método Add será responsável pela inclusão de um registro na base de dados, o método retornará a entidade adicionada na base, já setado com o Id do registro, os métodos Update e Delete, recebem o objeto, com o objetivo de atualizar e deletar respectivamente e o método GetAll retornará todos os registros na tabela Contato.

Vou adicionar agora a classe ContatoDAO.cs, para isso, clique com o botão direito do mouse no projeto Contatos.Data e em Add – New Item, em Installed Templates, selecione Visual C# Items, clique em Class, dê o nome de ContatoDAO.cs e adicione ao projeto.

 

 
A Primeira modificação que vou fazer no projeto é implementar a interface IDAO e passar a entidade Contato como T:

Em seguida vou criar uma instância do modelo do EntityFramework, o arquivo ModelContato.Context.cs contém o nome na string ContainerName, neste exemplo o nome da classe é ModelContatoContainer:

ModelContatoContainer model = new ModelContatoContainer();

Agora basta implementar as quatro operações CRUD conforme abaixo:
   

# region CRUD

        public T Add(T pEntity)        {            model.ContatoSet.AddObject(pEntity);            model.SaveChanges();            return pEntity;        }

        public void Delete(T pEntity)        {            model.ContatoSet.Attach(pEntity);            model.DeleteObject(pEntity);            model.SaveChanges();        }

        public void Update(T pEntity)        {            model.ContatoSet.Attach(pEntity);            model.ObjectStateManager.ChangeObjectState(pEntity,                               System.Data.EntityState.Modified);            model.SaveChanges();        }

        public IQueryable GetAll()        {            return model.CreateObjectSet();        }

# endregion

Uma visão geral da classe pode ser vista na figura abaixo:

Neste momento nosso projeto está com a seguinte estrutura:

continua…

« Entradas anteriores | Entradas recentes »

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2791 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com