Produtividade com NHibernate 2.0: ActiveWriter e ActiveRecord

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.

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

 

Clique aqui para ler esse artigo em PDF.

 

Expert – Boas Práticas

Produtividade com NHibernate 2.0

ActiveWriter e ActiveRecord

 

Antes de começar eu gostaria de falar de um artigo polêmico que eu escrevi sobre LINQ e NHibernate, há algum tempo atrás aqui na .NET Magazine. Digo polêmico porque muita gente “se incomodou” com o título do artigo, que foi LINQ X NHibernate.

O fato é que não é possível realizar uma comparação literal entre o LINQ e o NHibernate, já que são coisas completamente diferentes. O LINQ é uma linguagem para a execução de queries e o NHibernate é uma ferramenta O/RM, como iremos ver a seguir. (O/RM é a sigla em inglês para mapeamento objeto-relacional. Veja detalhes na nota do devman)

Na ocasião eu tentei deixar isso bem claro no próprio artigo, que na verdade traçou um paralelo entre o LINQ to SQL e Entity Framework com o NHibernate. Portanto, se você só leu o título do artigo pode ter ficado com a impressão errada.

Mas o fato de eu estar recordando deste artigo, é que ele está intimamente relacionado com este que você lê agora. No paralelo que foi traçado, colocamos na balança os prós e contras de se utilizar o NHibernate e as novas ferramentas de mapeamento da Microsoft (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 "

[...] continue lendo...
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados