Visual Studio + NHibernate: Construindo aplicações em camadas – (cont. III)

No post anterior criamos o ambiente da aplicação no Visual Studio. Criamos os sub-projetos e definimos as hierarquias de acesso que caracteriza o desenvolvimento em camadas.

Neste post iniciaremos a codificação do nosso projeto Agenda Telefônica On-Line. O primeiro projeto que iremos codificar é o AgendaTelefonica.OR. Este projeto (ou esta biblioteca) será formado pelas classes que farão o papel de transferência de dados (DTO) entre as camadas. Essas classes ou os objetos irão trafegar livremente entre as camadas levando e trazendo informações. Já discutimos isso no post anterior. Neste projeto também dever haver os arquivos de mapeamento do Hibernate. As classe que vamos criar são as nossas ferramentas de trabalho. Os arquivos de mapeamento são as ferramenta de trabalho de Hibernate. Para cada classe criada deve existir um arquivo .hbm.xml correspondente. Este arquivo possui regras para mapeamento da classe com o banco de dados (not-null, FK, PK, FK, tipos e tamanho dos campos, etc.). Na prática, os arquivos .hbm.xml representam exatamente os campos das tabelas do banco de dados com seus respectivos tipos e relacionamentos. As classes também são uma retratação deste mapeamento.

Para cada tabela do banco deve existir:

  1. Um arquivo .hbm.xml que corresponde ao mapeamento relacional do Hibernate com a tabela do banco;
  2. Um arquivo .cs (poderia ser em outra linguagem) da classe que também corresponde a tabela do banco de dados.

Por isso que eu chamo (eu e todo mundo que usa Hibernate) esse projeto de AgendaTelefonica.OR. O OR significa Objeto/Relacional. Como ainda não existe uma banco popularmente conhecido orientado a objeto, o Hibernate faz esse relacionamento pra nós. Ele transforma o paradigma relacional do banco de dados em orientado a objeto pra faciliar o desenvolvimento das aplicações. Tudo que nós faremos durante o desenvolvimento em orientação a objeto, será transformado pelo Hibernate em paradigma relacional (SQL) que é o que o banco efetivamente entende.

Então vamos criar os dois arquivos para cada tabela da nossa aplicação e inserí-lo no Visual Studio. Como escrever esses arquivos é uma tarefa repetitiva e metódica é interessante que se trabalhe com gerador de código. Vamos usar o MyGeneration para realizar este trabalho. No post Desenvolvimento Agil eu falo sobre os scripts que uso nesse processo. No post Desenvolvimento ágil – (cont. II) eu disponibilizo os scripts para download.

De posse do MyGeneration e do script (voce vai usar este: nHibernate updated by Reginaldo.zeus) você já pode (e deve) gerar os arquivos diretamente na pasta do projeto AgendaTelefonica.OR. Sobre este processo eu não vou escrever. Achei um artigo na internet que fala sobre o assunto:

Geração automática do mapeamento objeto/relacional para o NHibernate usando MyGeneration

Mas quero destacar algumas situações:

  1. Configure o MyGeneration para acessar o seu banco escolhido. No nosso projeto utilizamos o Firebird.
  2. Verfique se o seu MyGeneration é a versão definida no primeiro post (1.2.0.7), quando falamos da montagem do ambiente.
  3. Voce pode utilizar outros scripts como sugere o artigo. Mas é interessante que voce use o que eu indiquei para que tudo ocorra dentro do previsto e voce não tenha problemas com o restante do nosso tutorial. Abaixo vai a configuração que voce deve fazer ao executar o nosso script para gerar os arquivos pelo firebird (ou qualquer banco):

Se tudo foi gerado corretamente, quando abrir no Visual Studio a nossa solução, vai encontrar algo assim (selecione o projeto AgendaTelefonica.OR, localize no Solution Explorer o botão “Show All Files” e clique nele):

Finalmente temos mais duas configurações a fazer:

  1. Incluir ou anexar ao projeto AgendaTelefonica.OR os oito arquivos gerados;
  2. Alterar as propriedades “Buid Action” dos arquivos .hbm.xml.

Vamos fazer isso. Selecione os oito arquivos e, com eles selecionados, clique em algum com o botão direito do mouse e clique na opção “Include in project“. Depois selecione apenas os arquivos com .hbm.xml e, com eles selecionados, clique em algum deles com o botão direito do mouse e clique na opção “Properties”. Quando a aba de propriedades aparecer, mude o “Build Action” para “Embedded Resource“.
Essa mudança fará com que os arquivos do hibernate seja embutidos na bliblioteca da classe durante a compilação. É comum esquecer de realizar este processo. Na execução da aplicação, o Hibernate vai gerar uma exceção (um erro) que muitas vezes não é tão fácil de identifcar que o problema é não ter alterado a propriedade Build Action dos .hbm.xml. Por isso FIQUE ATENTO A ESTE PASSO. Se tudo foi feito corretamente o Solution Explorer estará assim:

E a propriedade Build Action de todos os .hbm.xml estarão assim:

Pronto. Vencemos mais esta etapa. Já temos nossa blibioteca com as classes e mapeamento para Hibernate. Inclusive as classes dessa biblioteca irá servir como objetos de transferência de dados (DTO). Tente compilar/executar a solução. Não deve dar nenhum erro, a não ser um aviso informando que não há nenhum projeto que possa ser executado. Normal… Afinal são apenas Class Library.

Também é interessante que voce abra os arquivos .cs e os arquivos .hbm.xml gerados e tente identificar os componentes comparando com as tabelas do banco de dados. Se voce desejar se aprofundar neste conhecimento, abaixo, tem um link para uma excelente apostila sobre o entendimento do Hibernate e suas configurações nos arquivos de mapeamento. Vale apena olhar. Fala sobre o Hibernate do Java, mas a compreensão é a mesma para o NHibernate do .NET.

Clique aqui e veja a apostila.

No próximo post vamos trabalhar com o projeto AgendaTelefonica.DAO e AgendaTelefonica.Interface, na pasta DAO. Vamos criar os DAO´s e as interfaces para os mesmos.

Até lá.

2 Respostas para “Visual Studio + NHibernate: Construindo aplicações em camadas – (cont. III)”


  1. 1 Altenor Jr 28.06.2008 às 4:28

    Olá, amigo. Muito boas as dicas. NHibernate é pra mim até hoje um cartãozinho de visitas do Demônio. Entretanto, o projeto no qual estou empenhado atualmente demanda o uso desse artifício, motivo pelo qual aguardo ansiosamente pelos próximos posts ;)

    Abraço

  2. 2 Welkson Renny 17.08.2008 às 15:57

    Olá Reginaldo!

    Obrigado pelo empenho nesses artigos sobre o NHibernate! estou trabalhando no meu projeto do TCC utilizando NHibernate e tenho achado poucos materiais na NET…

    Novamente muito obrigado e parabéns!

    Welkson Renny
    Natal/RN


Deixe um comentário




Calendário

Junho 2008
D S T Q Q S S
« Mar   Jul »
1234567
891011121314
15161718192021
22232425262728
2930  

Desde (04/11/07)

  • 34,786 visitas