Produtividade com NHibernate 2.0: ActiveWriter e ActiveRecord

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (2)  (0)

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

 

imagem_pdf.jpg

 

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 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

 

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?