Capítulo 2

No capítulo 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 capítulo 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 deve conter os arquivos de mapeamento do Hibernate. As classe que vamos criar são o que serão nosso condutor de informação entre o banco de dados e o restante da aplicação. 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, tipos e tamanho dos campos, etc.). Na prática, os arquivos .hbm.xml representam exatamente a extrutura 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 um banco popular e comercialmente conhecido 100% orientado a objeto (não que eu saiba), 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í-los no projeto AgendaTelefoncia.OR da nossa solução no Visual Studio. Como escrever esses arquivos é uma tarefa repetitiva, metódica e cansativa, é interessante que se trabalhe com gerador de código. Vamos utilizar o RSClass – Gerador de Classes para gerar os arquivos. Este programa foi indicado para instalação no primeiro post deste tutorial.

A utilização do RSClass – Gerador de Classes é bem simples. Ao executar o programa pela primeira vez deve-se configurar o ambiente. A primeira tela do programa pede para definir informações sobre a aplicação de trabalho. São as informações do projeto que no, meu caso, ficaram assim:

rsclassselecionaprojetoA pasta de destino deve ser a pasta da solução criada pelo Visual Studio no post anterior. Note também que o no campo “Sigla do projeto”, a sigla foi informada compatível com as camadas geradas no post anterior. Feita as configurações, clique em ‘Conectar’. O RSClass – Gerador de Classes vai abrir sua tela principal com informações sobre o local onde serão gerados os arquivos de cada camada, as tabelas e views do banco de dados e os recursos que podem ser gerados. Observação: as pastas de destinos são padronizados. Se seu projeto no Visual Studio não seguir essa estrutura, o RSClass – Gerador de Classes não poderá gerar as classes. Assim, para esse exercício, marque a opção ‘Mapeamento‘ e selecione todas as tabelas. Clique finalmente no botão ‘Gerar Classes‘.

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 NHibernate sejam embutidos na bliblioteca da classe durante a compilação. É comum esquecer de realizar este processo. Na execução da aplicação, o NHibernate vai gerar uma exceção (um erro) que muitas vezes não é tão fácil de identifcar que o problema é o fato de 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á assim:

Mais uma coisa: vamos adicionar uma outra biblioteca ao projeto AgendaTelefonica.OR. Clique com botão direito do mouse sobre o projeto e selecione “Add Reference…”. Localize o arquivo Regisoft.dll que está na pasta de instalação do RSClass – Gerador de Classes e adicione ao projeto.

Pronto. Vencemos mais esta etapa. Já temos nossa blibioteca com as classes e mapeamento para NHibernate. Como já falamos, as classes dessa biblioteca irão servir como objetos de transferência de dados (DTO). Tente montar a solução (Ctrl+Shift+B). Não deve dar nenhum erro de compilação. Na pasta de instalação do RSClass – Gerador de Classes voce pode encontrar os arquivos deste tutorial gerados até aqui (PARTE III).

Também é interessante que voce abra os arquivos .cs e os arquivos .hbm.xml gerados e tente identificar informações 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 NHibernate 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 capítulo vamos trabalhar com o projeto AgendaTelefonica.DAO e AgendaTelefonica.Interface, na pasta DAO. Vamos criar os DAO´s e as interfaces para os mesmos.

Anúncios