capnet43.jpg

Clique aqui para ler todos os artigos desta edição

Boas Práticas

Introdução ao NHibernate

Persistência de objetos e mapeamento O/R no .NET

 

Este artigo discute

Este artigo usa as seguintes tecnologias

·       O que é NHibernate;

·       Persistência de objetos;

·       Programação em camadas;

·       Mapeamento objeto-relacional (ORM).

Visual Studio 2005, ASP.NET 2.0, C#, NHibernate e SQL Server.

 

Muito tem se falado em frameworks de desenvolvimento. A idéia de um framework é reunir um conjunto de ferramentas e/ou utilitários para facilitar o desenvolvimento de aplicações. Um desses frameworks é o NHibernate

O NHibernate é um framework para mapeamento objeto-relacional (ORM). Com ele podemos criar uma estrutura de classes sem se preocupar com os famosos SELECT’s, INSERTS’s, UPDATE’s e DELETE’s, a própria ferramenta criará esses comandos em tempo de execução, facilitando muito a vida do desenvolvedor, entre diversas outras coisas.

Neste artigo veremos como criar uma aplicação de exemplo utilizando o NHibernate, aproveitando para examinar sua arquitetura, fundamentos e funcionalidade.

O que são ORMs?

Nem sempre a estrutura das classes corresponde a estrutura do banco de dados, afinal o modelo Orientado a Objetos difere em vários pontos do modelo relacional que é largamente utilizado em bancos de dados (salvo em bancos de dados OO).

Essas diferenças ocorrem devido ao processo de normalização de tabelas, onde pensamos sempre na eliminação de dados redundantes e dependências, além do que na Orientação a Objetos utilizamos sempre o conceito de reaproveitamento. Veja um exemplo dessa dificuldade na Figura 1.

 

Figura 1. Como efetuar a transformação entre os modelos?

Devido a essas e outras diferenças, não podemos salvar/carregar diretamente a nossa classe a partir de uma tabela em banco de dados relacional. Para isso usamos os ORMs.

ORM é uma sigla em inglês que significa Object Relational Mapper (Mapeador Objeto Relacional). ORMs são ferramentas responsáveis por mapear as classes do modelo Orientado a Objetos para tabelas do modelo relacional.

Através desse mapeamento, conseguimos dizer que determinada propriedade da classe será associada a um campo de uma tabela. Podemos reunir um conjunto de propriedades de várias classes e salvar na mesma tabela e vice-versa.

Para ficar fácil o entendimento, dizemos que as classes representam tabelas do banco de dados e cada instância de uma classe criada representa um registro da tabela. Quando coletamos os valores das propriedades de uma classe e salvamos em um banco de dados ou qualquer outro meio de armazenamento, estamos fazendo o processo de persistência de dados.

Vantagens no uso de ORMs

Um dos trabalhos mais tediosos no desenvolvimento de uma aplicação é ter que escrever comandos para efetuar a persistência dos dados do modelo de classes em um banco de dados. Quem nunca perdeu horas e horas escrevendo comandos SQL para gravar e retornar valores de um banco de dados?

Uma das grandes vantagens no uso de frameworks para mapeamento objeto-relacional é a economia de tempo. Com os ORMs ao invés de gastarmos tempo criando lógica para gravação de dados, investimos tempo pensando nas regras de negócios do sistema que será desenvolvido, ou seja, não precisaremos escrever comandos SQL, o mapeador objeto-relacional fará esse trabalho para nós!

Outra vantagem, é que a maioria dos frameworks para mapeamento oferece suporte a diversos tipos de bancos de dados. Isso significa que caso tenhamos que mudar de banco de dados (SQL Server, Oracle, Sybase, Informix e outros) teremos que simplesmente dizer para o framework de mapeamento (NHibernate) o novo tipo de banco de dados que utilizaremos.

Dessa forma, não precisamos reescrever todos os comandos SQL que criamos especificamente para um tipo de banco de dados, essa é uma grande vantagem! Podemos listar outras vantagens, como: gerenciamento de transações, recursos para cache de objetos, paginação de resultados etc.

Como funciona o NHibernate

O NHibernate funciona como uma camada entre o modelo de classes e o modelo relacional. O NHibernate, entre outras coisas, cria os quatro comandos INSERT, SELECT, UPDATE e DELETE em tempo de execução, para isso, ele utiliza os recursos de Reflection (obtenção de informações em tempo de execução) do .NET Framework e arquivos XML para mapeamento. Veja na Figura 2 um diagrama demonstrando claramente o funcionamento do NHibernate.

 

Figura 2. Funcionamento do NHibernate

As configurações do NHibernate (tipo de banco de dados, string de conexão com o banco etc.) são definidas em um arquivo chamado nhibernate.cfg.xml. Além dessas, temos outras configurações que estão fora do escopo do artigo.

Baixando o NHibernate

Para baixar a NHibernate, acesse o site www.nhibernate.org e localize a versão mais recente (durante a criação deste artigo, a versão de produção do NHibernate mais recente era 1.0.4.0).

Já existe a versão 1.2.0 beta 3 que vem com suporte ao uso de Stored Procedures, mas ainda é beta. Depois de efetuado o download, descompacte o arquivo em uma pasta. Dentro da pasta, você verá alguns diretórios como bin, doc e src.

Como o NHibernate é distribuído sob licença LGPL, temos acesso ao código-fonte para possíveis alterações/novas implementações.

Criando o projeto

Criaremos um cadastro de clientes bem simples para demonstrar as funcionalidades básicas do NHibernate. Fiquem a vontade para adicionar novos recursos. Veja na Figura 3 a estrutura de nossa aplicação.

 

Figura 3. Estrutura da aplicação de exemplo

Inicie um novo projeto Web clicando em File>New Web Site. Selecione o item ASP.NET Web Site e dê o nome de “Clientes_NHibernate” ao projeto (Figura 4).

 

Figura 4. Criando o projeto Web

Exclua a página chamada Default.aspx através do Solution Explorer. Agora vamos adicionar duas páginas, uma para pesquisa e outra para edição/exclusão de clientes. Selecione o projeto no Solution Explorer e clique no menu Add New Item>Web Form.

O nome da página será “Clientes_Listar.aspx”. Repita o mesmo processo anterior e adicione mais uma página chamada “Clientes_Editar.aspx”. Defina a página Clientes_Listar.aspx como página inicial.

Por padrão, o Visual Studio 2005 não cria o arquivo Web.config, portanto teremos que inseri-lo manualmente. Clique no menu Add New Item e selecione Web Configuration File (Figura 5).

 

...

Quer ler esse conteúdo completo? Tenha acesso completo