Esse artigo faz parte da revista .NET Magazine edição 60. Clique aqui para ler todos os artigos desta edição

 

e="mso-bidi-font-style: normal">Entity Framework e LINQ to SQL). E no final das contas concluímos que o Entity Framework sairia ganhando, principalmente pela facilidade do seu uso, diferente do NHibernate que pode ser bastante trabalhoso.

Agora é a hora do troco. Atendendo à pedidos, fizemos uma pesquisa e encontramos algumas ferramentas que podem tornar o trabalho com o NHibernate bem mais prático do que o seu uso tradicional.

Aproveitando a oportunidade, vamos conhecer neste artigo a versão 2.0.1.GA NHIbernate, que foi lançada recentemente. E o objetivo principal deste artigo será mostrar como utilizar o NHibernate da forma mais prática e ágil possível, diminuindo ao máximo o trabalho “braçal” que é necessário em ferramentas de O/RM.

        

Nota do DevMan

Mapeamento objecto-relacional (ou O/RM) é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada a objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.

 

Com esta técnica, o programador não precisa de se preocupar com os comandos em linguagem SQL; irá usar uma interface de programação simples que faz todo o trabalho de persistência.

 

Não é necessária uma correspondência direta entre as tabelas de dados e as classes do programa. A relação entre as tabelas onde originam os dados e o objeto que os disponibiliza é configurada pelo programador, isolando o código do programa das alterações à organização dos dados nas tabelas do banco de dados.

 

A forma como este mapeamento é configurado depende da ferramenta que será utilizada. Como exemplo, o programador que use Hibernate na linguagem Java (ou Nhibernate para .NET) pode usar arquivos XML ou o sistema de anotações que a linguagem providencia.

 

Alguns exemplos de Ferramentas O/RM são:

 

- ADO.NET Entity Framework (LINQ to Entities) : Ferramenta O/RM da Microsoft baseada na linguagem LINQ;

- SQLObject : Um poderoso sistema OR/M para Python;

- Hibernate : Uma ferramenta de mapeamento objeto relacional para Java;

- NHibernate : Uma ferramenta de mapeamento objeto relacional para .NET;

- OJB : Uma ferramenta de mapeamento objeto relacional para Java, da Apache Software Foundation;

- Django (framework web): Framework de desenvolvimento web escrito em Python que possui um OR/M próprio.

 

Além dessas, podemos citar as seguintes ferramentas para .NET, que de uma forma ou outra tentam atender à essa necessidade: .NET Persistence, BBADataObjects, DataObjects.NET, Data Tier Modeler for .NET, DotNorm, Eldorado.NET, Entity Broker, eXpress Persistent Objects for .NET, FastObjects.NET, JC Persistent Framework, LLBLGen Pro, ModelWorks, Nolics.NET, Norm, Norpheme, ObjectBroker, ObjectSpaces, ObjectSpark, Objectz.NET, OJB.NET, OPF.Net (Object Persistent Framework), ORM.NET, Pragmatier Data Tier Builder, RapTier, Sisyphus Persistence Framework, TierDeveloper, Bob.NET, ObjectPersistor.NET, Genome.

 

Esta definição foi baseada na definição de O/RM do Wikipédia: http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional

        

O que é o NHibernate?

O NHibernate é a versão para .NET do framework de persistência chamado Hibernate,  originalmente desenvolvido para a plataforma Java.

O objetivo de um framework de persistência como o NHibernate, é “transformar” os dados que estão na aplicação na forma de objetos, em dados relacionais, compatíveis com os Bancos de Dados Relacionais que temos no mercado.

Para que isso seja possível, é necessária a realização de um mapeamento objeto-relacional. Por isso também dizemos que o NHibernate é uma ferramenta de O/RM. Como dito na nota do devman, com o O/RM estamos declarando como os nossos objetos podem ser transformados em dados relacionais (e vice-versa), com um mapeamento entre Classes e Tabelas (Orientação a Objetos X Bancos de Dados Relacionais).

A principal vantagem do NHibernate é que com ele não precisamos escrever nenhum comando SQL. Todos os comandos são gerados em tempo de execução pelo framework. Além disso, ele dá suporte para os principais Bancos de Dados Relacionais do mercado (SQL Server, Oracle, PostgreSQL, MySQL, etc), o que torna fácil o desenvolvimento de aplicações que trabalham com diferentes tipos de bancos.

Do ponto de vista do desenvolvedor estamos trabalhando apenas com Orientação a Objetos, pois todas as ações CRUD são realizadas através dos métodos do nosso modelo de Classes. De forma prática, através de um mapeamento objeto-relacional o NHibernate gera todos os comandos SQL necessários para a aplicação, em tempo de execução.

O NHibernate é muito utilizado em aplicações desenvolvidas sob a arquitetura MVC (Model – View – Controller), mas também pode ser utilizado sem a adoção deste padrão.

O NHibernate é Open Source e pode ser baixado gratuitamente no site do Hibernate. Atualmente o NHibernate está na versão 2.0.1.GA, que saiu recentemente (Setembro/2008) e pode ser baixada através deste link: http://sourceforge.net/project/showfiles.php?group_id=73818&package_id=73969

Adicionalmente você vai encontrar uma vasta documentação e informações a respeito do NHibernate e Hibernate no seguinte site: http://www.hibernate.org/.

 

Nota do DevMan

Model-view-controller (MVC) é um padrão de arquitetura de software. Com o aumento da complexidade das aplicações desenvolvidas torna-se fundamental a separação entre os dados (Model) e o layout (View). Desta forma, alterações feitas no layout não afetam a manipulação de dados, e estes poderão ser reorganizados sem alterar o layout. O model-view-controller resolve este problema através da separação das tarefas de acesso aos dados e lógica de negócio, lógica de apresentação e de interação com o utilizador, introduzindo um componente entre os dois: o Controller. MVC é usado em padrões de projeto de software, mas MVC abrange mais da arquitetura de uma aplicação do que é típico para um padrão de projeto.

 

MVC é muito visto também em aplicações para Web, onde a View é geralmente a página HTML, e o código que gera os dados dinâmicos para dentro do HTML é o Controller. E, por fim, o Model é representado pelo conteúdo de fato, geralmente armazenado em bancos de dados ou arquivos XML. Ainda que existam diferentes formas de MVC, o controle de fluxo geralmente funciona como segue:

 

1. O usuário interage com a interface de alguma forma (por exemplo, o usuário aperta um botão);

 

2. O Controller manipula o evento da interface do usuário através de uma rotina pré-escrita;

 

3. O Controller acessa o Model, possivelmente atualizando-o de uma maneira apropriada, baseado na interação do usuário (por exemplo, atualizando os dados de cadastro do usuário);

 

4. Algumas implementações de View utilizam o Model para gerar uma interface apropriada (por exemplo, mostrando na tela os dados que foram alterados juntamente com uma confirmação). O View obtém seus próprios dados do Model. O Model não toma conhecimento direto da View;

 

5. A interface do usuário espera por próximas interações, que iniciarão o ciclo novamente.

 

Originalmente foi criado como padrão de projeto arquitetural desenvolvido para o ambiente Smalltalk, mas ele pode ser utilizado para qualquer aplicação interativa.

 

Definição retirada do Wikipedia: http://pt.wikipedia.org/wiki/MVC

 

A Microsoft, a partir do Service Pack 1 do Visual Studio 2008 / .NET Framework 3.5 disponibiliza o ASP.NET MVC Framework, uma framework voltada exclusivamente para a criação de aplicações Web com a utilização do padrão MVC.

 

Acesso simples com ADO.NET

A principal funcionalidade do NHibernate também é a principal fonte de problemas decorrente do seu uso. Quando utilizamos o NHibernate, ou uma ferramenta similar, de cara nosso trabalho é duplicado, graças aos arquivos de mapeamento.

Antes de entrarmos nos detalhes do NHibernate, vamos recordar brevemente como fazer o acesso a um banco de dados pelos meios mais simples do ADO.NET. Assim teremos uma base de comparação, para avaliarmos quais são os métodos mais produtivos.

Vamos pegar como exemplo o database Northwind do SQL Server (veja na nota como e onde encontrá-lo). Imagine uma aplicação que vá utilizar as tabelas que você vê no diagrama de entidades e relacionamentos da Figura 1.

 

Figura 1. Diagrama de Entidades e Relacionamentos do Database Northwind do SQL Server

 

Nota: O Database Northwind é uma banco de dados do SQL Server para testes e com estrutura definida para uma aplicação de vendas, onde temos Produtos, Clientes, Fornecedores, Pedidos etc. A Microsoft disponibiliza este database já com dados e pode ser obtido através do seguinte link:

http://tinyurl.com/northwinddb

Faça o download e execute o arquivo de instalação. Ao término da instalação, os databases de exemplo do SQL Server 2000 serão instalados na pasta C:\SQL Server 2000 Sample Databases. Você pode obviamente movê-los para o local da sua conveniência.

 

Este diagrama representa as tabelas de uma base de dados de vendas e estoque onde temos: clientes, produtos, fornecedores, funcionários ...

Quer ler esse conteúdo completo? Tenha acesso completo