criando uma aplicação web em c

14
Criando uma aplicação Web em C# usando o NHibernate Apresento neste artigo como criar uma aplicação web totalmente orientada a objetos usando o framework NHibernate e a linguagem C#. Nossa meta é construir um website com um cadastro de atividades usando os novos controles GridView e ObjectDataSource, ambos presentes no Framework .NET 2.0. A aplicação possuirá as funcionalidades básicas de um cadastro, sendo elas: consultar, inserir, editar e remover. Um detalhe muito importante é que nenhuma linha de código SQL será escrita devido ao uso do NHibernate. Para desenvolver esta aplicação vamos usar as seguintes ferramentas: - Visual Studio 2005 (pode ser o Visual Web Developer 2005 Express Edition) Link: http://msdn.microsoft.com/vstudio/express/vwd/ - MySQL 5.0 Community Edition Link: http://dev.mysql.com/downloads/mysql/5.0.html - MySQL Connector 1.0.7: provider pra acessar o MySQL Link: http://dev.mysql.com/downloads/connector/net/1.0.html - MyGeneration 1.1.5.1: ferramenta para gerar o mapeamento objeto/relacional para o NHibernate Link: http://www.mygenerationsoftware.com - NHibernate 1.0.2: framework para persistência dos objetos Link: http://www.nhibernate.org - Instalação e configuração das ferramentas Depois de fazer o download de todas as ferramentas citadas acima, instale o MySQL, crie um banco de dados chamado WebAppOO e uma tabela chamada Atividade com os seguintes campos: - Id - Int (primary key) - Nome - Varchar(50), Not null - Descrição - Varchar(200), Not null Deve ficar assim: Agora instale o provider do MySQL e o MyGeneration. Não vou cobrir a configuração do MyGeneration, para isso veja nas referências desse artigo a documentação sobre o assunto. O próximo passo é descompactar o NHibernate em uma pasta qualquer. - Criando a aplicação Abra o Visual Studio e crie uma nova solução chamada ProjetoWeb. Para isso, clique em File - New - Project - Other Project Types - Visual Studio Solutions e escolha o template Blank Solution. Chame a solução de ProjetoWeb e defina a localização (de preferência a mesma do artigo). Veja:

Upload: vinicius-marion

Post on 14-Sep-2015

220 views

Category:

Documents


2 download

DESCRIPTION

Apresento neste artigo como criar uma aplicação web totalmente orientada a objetos usando oframework NHibernate e a linguagem C#.

TRANSCRIPT

  • Criando uma aplicao Web em C#

    usando o NHibernate

    Apresento neste artigo como criar uma aplicao web totalmente orientada a objetos usando o

    framework NHibernate e a linguagem C#.

    Nossa meta construir um website com um cadastro de atividades usando os novos controles

    GridView e ObjectDataSource, ambos presentes no Framework .NET 2.0. A aplicao possuir as

    funcionalidades bsicas de um cadastro, sendo elas: consultar, inserir, editar e remover. Um detalhe

    muito importante que nenhuma linha de cdigo SQL ser escrita devido ao uso do NHibernate.

    Para desenvolver esta aplicao vamos usar as seguintes ferramentas:

    - Visual Studio 2005 (pode ser o Visual Web Developer 2005 Express Edition)

    Link: http://msdn.microsoft.com/vstudio/express/vwd/

    - MySQL 5.0 Community Edition

    Link: http://dev.mysql.com/downloads/mysql/5.0.html

    - MySQL Connector 1.0.7: provider pra acessar o MySQL

    Link: http://dev.mysql.com/downloads/connector/net/1.0.html

    - MyGeneration 1.1.5.1: ferramenta para gerar o mapeamento objeto/relacional para o NHibernate

    Link: http://www.mygenerationsoftware.com

    - NHibernate 1.0.2: framework para persistncia dos objetos

    Link: http://www.nhibernate.org

    - Instalao e configurao das ferramentas Depois de fazer o download de todas as ferramentas citadas acima, instale o MySQL, crie um banco

    de dados chamado WebAppOO e uma tabela chamada Atividade com os seguintes campos:

    - Id - Int (primary key)

    - Nome - Varchar(50), Not null

    - Descrio - Varchar(200), Not null

    Deve ficar assim:

    Agora instale o provider do MySQL e o MyGeneration. No vou cobrir a configurao do

    MyGeneration, para isso veja nas referncias desse artigo a documentao sobre o assunto.

    O prximo passo descompactar o NHibernate em uma pasta qualquer.

    - Criando a aplicao Abra o Visual Studio e crie uma nova soluo chamada ProjetoWeb. Para isso, clique em File - New

    - Project - Other Project Types - Visual Studio Solutions e escolha o template Blank Solution.

    Chame a soluo de ProjetoWeb e defina a localizao (de preferncia a mesma do artigo). Veja:

  • Clique no boto OK e uma soluo vazia ser criada. Agora crie um website, clicando com o boto

    direito do mouse sobre a soluo recm criada, escolha Add - New Web Site. Deixe selecionado o

    template ASP.NET Web Site e na localizao coloque c:\ProjetosVS\ProjetoWeb\WebAppOO.

    Deve ficar da seguinte forma:

    Clique em OK para criar o website. Agora vamos montar a nossa interface. Deixe o arquivo

    Default.aspx com a seguinte aparncia:

  • Os controles mais importantes so o GridView e o ObjectDataSource. Repare que somente adicionei

    os controles na tela e configurei o nome deles, ainda no fiz nenhuma ligao entre eles. O hyperlink

    Inserir Atividade aponta para o arquivo InserirAtividade.aspx. - Web.config

    Aps ter criado a aplicao, precisamos adicionar o arquivo Web.config. Nele ficaro as

    configuraes do website e tambm as do NHibernate. Para isso, clique com o boto direito sobre o

    projeto e selecione Add New Item. Escolha o template Web Configuration File e clique em Add.

    Abra o arquivo Web.config que acabou de ser adicionado e procure pelo item configuration. Logo

    aps ele, adicione as seguintes linhas:

    Todo esse cdigo acima referente a configurao do NHibernate. Se por acaso pretendermos

    mudar o banco de dados da aplicao, basta alterar algumas das linhas acima.

  • - Mapeamento objeto/relacional Como mencionado anteriormente, no vou entrar em detalhes sobre o MyGeneration. Uma

    documentao detalhada sobre ele pode ser encontrada nas referncias desse artigo.

    Faremos o mapeamento em um outro projeto, chamado MapeamentoOR. Para isso, clique com o

    boto direito sobre a Solution, escolha Add - New Project, selecione o template Class Library, digite

    o nome MapeamentoOR e defina o campo Location para C:\ProjetosVS\ProjetoWeb. Veja como

    deve ficar:

    Clique em OK e logo que o projeto MapeamentoOR for criado, remova o arquivo Class1.cs que ele

    gerou automaticamente.

    Veja abaixo os arquivos .hbm.xml e .cs que compem o mapeamento da tabela Atividade.

    Atividade.hbm.xml

  • Atividade.cs (perceba que a classe est marcada como Serializable)

    A declarao das propriedades Nome e Descricao simplesmente implementam o get e set para a

    respectiva varivel private. Tome como exemplo a propriedade Id. Ambos os arquivos foram

    gerados com o MyGeneration. Entretanto, fiz algumas alteraes aps a gerao, como por exemplo,

    as checagens nos mtodos get e set. A princpio isso no necessrio. Somente as fiz para poder

    mostrar o cdigo aqui, caso contrrio ficariam gigantes.

    Os dois arquivos devem ser adicionados ao projeto MapeamentoOR e o Atividade.hbm.xml deve ter

    a propriedade Build Action configurada para Embedded Resource. Para isso, clique com o boto

    direito sobre ele no Solution Explorer e escolha Properties. Logo abaixo aparecero as propriedades

    desse arquivo. Configure-as desta forma:

    O projeto MapeamentoOR deve estar da seguinte maneira:

  • Se tudo estiver correto, efetue o Build clicando com o boto direito sobre MapeamentoOR e

    escolhendo a opo Build. Depois disso, uma dll chamada MapeamentoOR.dll ser gerada.

    No projeto principal (WebAppOO), vamos adicionar uma referncia dll gerada. Clique com o

    boto direito sobre ele e escolha Add Reference. Navegue at a aba Projects e l estar a dll do

    projeto MapeamentoOR. Veja:

    Selecione essa dll e clique em OK. A partir de agora poderemos acessar o mapeamento

    objeto/relacional de dentro do website WebAppOO.

    - Classe Helper para o NHibernate Como o NHibernate ser acessado vrias vezes pela nossa aplicao, nada mais sensato do que criar

    uma classe com mtodos para facilitar o nosso trabalho. Para a aplicao em questo, precisamos

    somente de um mtodo: GetSession(). Ele nos retornar uma sesso com o NHibernate, que

    corresponde a uma conexo com o banco de dados.

    Alm de facilitar nossa vida nas chamadas ao NHibernate, essa classe ser responsvel por manter

    na memria somente uma instncia do mapeamento objeto/relacional. De acordo com a

    documentao do prprio framework, o processo de carga do mapeamento muito pesado, portanto

    recomenda-se que somente uma instncia do mesmo seja compartilhada entre as requisies.

    Tendo em vista esse problema, logo nos surge a idia de usar um dos vrios padres de projeto, o

    Singleton. A finalidade desse padro permitir que somente uma instncia de determinada classe

    esteja na memria.

    Antes de criar a classe helper, precisamos adicionar uma referncia ao arquivo NHibernate.dll ao

    WebAppOO. Para isso, clique com o boto direito sobre o projeto WebAppOO e selecione Add

    Reference. Navegue at a pasta onde o NHibernate foi descompactado, procure pela pasta bin e

    dentro desta procure pelo arquivo NHibernate.dll. Clique em OK.

    Aps adicionar essa referncia, o projeto deve ter ficado da seguinte forma:

  • Repare que outras dlls foram adicionadas junto com a do NHibernate.

    Agora adicione um novo arquivo ao projeto WebAppOO (dentro da pasta App_Code) chamado

    NHibernateHelper.cs.

    Veja o cdigo:

    A classe NHibernateHelper prov um mtodo chamado GetSession(). Sua implementao garante

    que somente uma instncia do SessionFactory ser criada. - Camada de acesso a dados

    Vamos adicionar um novo arquivo ao projeto: AtividadeDAO.cs. Esse arquivo possui mtodos

    responsveis por inserir, selecionar, alterar e remover uma atividade. Todos os mtodos dessa classe

  • vo trabalhar com objetos, ou seja, para inserir uma atividade, por exemplo, no ser usada uma

    query SQL, mas sim uma funcionalidade do NHibernate que recebe um objeto e gera a query.

    Adicione o arquivo AtividadeDAO.cs na pasta App_Code do projeto WebAppOO. Assim que ele for

    criado, j inclua os namespaces System.Collections, NHibernate e MapeamentoOR na sesso using.

    Agora vamos codificar todos os mtodos necessrios classe AtividadeDAO. Vamos precisar dos

    seguintes mtodos:

    - RetornaAtividades(): retorna todas as atividades cadastradas na tabela Atividade. Ele recebe trs

    parmetros: column, maximumRows e startRowIndex. O primeiro serve para executar a ordenao e

    os dois ltimos a paginao. Cdigo:

    Vale a pena ressaltar que a varivel sql no est recebendo um comando SQL, mas sim HQL, que

    prprio do NHibernate. Logo, poderia ter sido chamada de hql ao invs de sql.

    - SalvaAtividade(): recebe como parmetro um objeto do tipo Atividade e salva ele usando o

    NHibernate. Cdigo:

    - RetornaAtividade(): recebe como parmetro a Id de uma atividade a ser retornada. Cdigo:

    - ExcluirAtividade(): recebe como parmetro uma atividade a ser excluda e exclui ela. Cdigo:

  • - AtualizaAtividade(): atualiza uma atividade recebida por parmetro. Cdigo:

    - Ligao dos controles da interface com a camada de acesso a dados Depois de implementados os mtodos da classe AtividadeDAO, vamos configurar os controles da

    interface (arquivo Default.aspx). Veja abaixo a configurao de cada controle:

    GridView

    - ID = _grdAtividades

    - AllowPaging = true (habilita a paginao);

    - PageSize = 5 (configura a paginao para 5 registros por pgina);

    - AllowSorting = true (habilita a ordenao);

    - DataSourceID = _odsAtividades;

    - Na Smart Tag (aquela setinha no canto superior-direito da grid), selecione Enable Selection para

    mostrar o boto Select para cada linha da grid.

    ObjectDataSource (se ao alterar alguma propriedade desse controle voc for questionado para recriar

    os campos da grid, seleciona No. Provavelmente isso vai acontecer ao alterar a DataSourceID)

    - Name = _odsAtividades;

    - EnablePaging = true (habilita a paginao);

    - TypeName = AtividadeDAO (nome da classe que prov os mtodos para selecionar, inserir,

    remover e atualizar os dados);

    - SelectMethod = RetornaAtividades (nome do mtodo da classe AtividadeDAO que retorna todas as

    atividades cadastradas);

    - SortParameterName = column (nome do parmetro do mtodo RetornaAtividades que ser usado

    para a ordenao dos registros);

    - MaximumRowsParameterName = maximumRows (nome do parmetro do mtodo

    RetornaAtividades que representa o nmero mximo de linhas que sero mostradas por pgina. No

    precisa alterar o valor dessa propriedade, pois ela j vem configurada por padro);

    - StartRowIndexParameterName = startRowIndex (nome do parmetro do mtodo RetornaAtividade

    que representa o primeiro registro da consulta que ser mostrado. No precisa alterar o valor dessa

    propriedade, pois ela j vem configurada por padro).

    Aps essas configuraes, j podemos executar pela primeira vez a aplicao. Clique com o boto

    direito sobre a Solution e escolha Build Solution. Assim que o Build acabar, execute o projeto. Eu

    executei no modo debug e apareceu uma mensagem me informando que o modo debug no estava

    habilitado no Web.config. Logo, deixei marcada a opo Modify the Web.config file to enable

    debugging e cliquei em OK.

    Vejam o resultado da execuo:

  • Logicamente nenhuma atividade foi listada, pois no h nenhuma cadastrada.

    Criamos at agora toda a estrutura do site e a funo consultar. Faltam ainda trs: inserir, editar e

    excluir. - Inserir atividade

    O cadastro de atividades ser realizado em um arquivo chamado InserirAtividade.aspx, que o

    mesmo que foi referenciado no hyperlink Inserir Atividade.

    Adicione um novo Web Form ao projeto WebAppOO com o nome InserirAtividade.aspx. Aps

    adicion-lo, clique com o boto direito sobre o Default.aspx e defina ele como a pgina inicial

    clicando em Set As Start Page, caso contrrio, a aplicao ser iniciada pelo InserirAtividade.aspx.

    Configure sua aparncia da seguinte forma:

    Repare novamente que no fiz nenhuma configurao em especial, somente alterei a ID dos

    controles e o Text.

    Agora vamos implementar os eventos relacionados ao boto Salvar e Cancelar. Antes disso, adicione

    o using MapeamentoOR.

    No boto cancelar, basta dar um duplo clique sobre ele e adicionar o seguinte cdigo ao evento

    Click:

  • No boto Salvar, tambm com um duplo clique, adicione o seguinte cdigo ao evento Click:

    Pronto! A est o nosso cadastro de atividades. Rode a aplicao e clique no link Inserir Atividade.

    Cadastre algumas atividades e veja o resultado:

    Com algumas atividades cadastradas, j podemos ver as funes de paginao e ordenao

    implementadas anteriormente. Clique sobre os campos (Id, Nome ou Descrio) para ordenar ou

    sobre os nmeros no canto inferior/direito para mudar de pgina.

    - Editar e excluir uma atividade

  • O processo para editar uma atividade semelhante ao de inserir. Para facilitar as coisas, vou usar

    outro arquivo chamado EditarAtividade.aspx. Entretanto, acho que a forma mais correta de fazer isso

    seria usando um mesmo arquivo para inserir e editar, afinal os campos sempre sero os mesmos.

    Desta forma, adicione outro Web Form a nossa aplicao e chame-o de EditarAtividade.aspx. Aps

    a criao deste web form, adicione o using MapeamentoOR a ele.

    Novamente, defina o Default.aspx como a pgina inicial (boto direito sobre o arquivo Default.aspx

    e selecione a opo Set As Start Page).

    A interface do EditarAtividade.aspx deve ficar desta forma:

    Repare que eu copiei e colei os mesmos controles do InserirAtividade.aspx e adicionei somente um

    boto para excluir a atividade em questo. Tambm defini a cor do TextBox cdigo para uma cor

    diferente das demais e sua propriedade ReadOnly est como true. Fiz isso, pois, logicamente, a

    chave primria do cadastro no poder ser alterada.

    Vamos s implementaes dos botes:

    - No boto cancelar, duplo clique sobre ele e adicione o seguinte cdigo ao evento Click:

    - No boto Salvar, duplo clique sobre ele e o cdigo do evento Click este:

    - E, finalmente, no boto excluir, duplo clique sobre ele e o cdigo do evento Click o este:

  • Agora que j temos os cdigos de todos os botes implementados, ficou faltando somente um

    detalhe: como que vou selecionar a atividade que eu desejo editar ou excluir?

    Se voc percebeu, existe um boto na grid chamado Select (inclusive esse nome pode ser

    personalizado). At agora no falei sobre ele, pois no era o momento. Esse boto ser programado

    para funcionar da seguinte maneira: assim que o usurio clicar sobre ele, ser redirecionado para o

    arquivo EditarAtividade.aspx. Para que isso seja possvel vamos implementar o evento

    SelectedIndexChanged da nossa grid (no arquivo Default.aspx). Clique com o boto direito sobre a

    grid, selecione Properties e de um duplo clique no evento SelectedIndexChanged (tome cuidado para

    no clicar no SelectedIndexChanging que tem uma funo totalmente diferente). Este evento dever

    ser implementado da seguinte forma:

    O SelectedIndexChanged ser disparado sempre que o usurio clicar no boto selecte de uma das

    linhas da grid. Ao entrar no evento, ele pega a linha que o usurio clicou e o redireciona para a

    pgina de edio de atividades, que a EditarAtividade.aspx. Veja que a Id da atividade selecionada

    (row.Cells[1].Text) passada como parmetro, por tanto no arquivo EditarAtividade.aspx possvel

    carregar uma atividade para ser editada. Para que isso acontea, abra o EditarAtividade.aspx e de um

    duplo clique no web form (alguma parte que no tenha nenhum controle). O evento Page_Load que

    foi criado dever possuir a seguinte implementao:

    Este evento simplesmente carrega a atividade no form para ser editada ou excluda. O mtodo

    CarregaAtividade deve estar implementado nesse mesmo arquivo da seguinte forma:

  • isso! Nosso website com as funes de consultar, inserir, remover e editar est pronto. Para ver

    como ficou, rode a aplicao e navegue atravs dos links Select e Inserir Atividade.

    - Concluso Esse artigo foi inspirado pelos dias de estudo dedicados plataforma .NET. Depois de passar alguns

    dias procurando a receita de bolo para como construir um website da melhor maneira possvel,

    cheguei concluso que existem vrias formas de alcanar esse objetivo. Como dizia Raul Seixas:

    "J fui catlico, budista, protestante,

    Tenho livros na estante, todos tm explicao."

    Em outras palavras, todo mundo defende a sua maneira de pensar, pena que nenhuma delas envolvia

    NHibernate e ObjectDataSource.

    Enfim, caso tenham alguma dvida sintam-se a vontade para entrar em contato.

    - Referncias NHibernate - Guia inicial

    Link: http://www.linhadecodigo.com.br/artigos.asp?id_ac=546

    Hibernate 3 - Introduo

    Link: http://www.guj.com.br/java.tutorial.artigo.174.1.guj

    Hibernate 3 - Avanado

    Link: http://www.guj.com.br/java.tutorial.artigo.181.1.guj

    MyGeneration - Gerao do mapeamento objeto/relacional

    Link: http://www.linhadecodigo.com.br/artigos.asp?id_ac=914

    Read more: http://www.linhadecodigo.com.br/artigo/917/criando-uma-aplicacao-web-em-csharp-usando-o-

    nhibernate.aspx#ixzz3dqa0quIR