Este é um post disponível para assinantes MVPMapeamento por Convenção no NHibernate com o ConfORM - Revista .net Magazine 89
Esse artigo mostra o que é e para que serve o ConfORM, um framework que permite o mapeamento por convenção no NHibernate, eliminando a necessidade de ter um arquivo XML ou uma classe (C# ou VB.NET) de mapeamento para cada entidade do modelo de n
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da .net Magazine 89
No desenvolvimento de aplicações de negócio sempre se tem uma grande preocupação com a produtividade do desenvolvimento, que impacta principalmente no tempo que é gasto com a manutenção dessas aplicações.
A orientação a objetos proporciona uma enorme produtividade se comparada com métodos utilizados em linguagens que não adotam essa filosofia. Uma de suas características que mais exemplifica o ganho de produtividade é a reutilização de código dentro de um projeto.
Quanto mais se aplica os conceitos básicos da orientação a objetos em uma aplicação, mais código é reutilizado, mais produtividade se ganha e mais fácil é dar manutenção nesse aplicativo.
Mas isso nem sempre é uma verdade absoluta em um projeto de software. Por mais que se tente reutilizar e diminuir ao máximo a repetição de código dentro de um projeto, sempre existe algum ponto onde isso não é inteiramente possível.
O NHibernate é uma ferramenta ORM (Mapeamento Objeto Relacional), que permite a utilização de um banco de dados relacional em uma aplicação modelada com a orientação a objetos. Para saber mais sobre o NHibernate procure por um das dezenas de artigos sobre o assunto na .NET Magazine. Quem trabalha com NHibernate sabe exatamente onde é difícil aplicar técnicas de reutilização. O ponto onde temos uma grande repetição de código está nos arquivos de mapeamento.
O NHibernate possui um mecanismo de mapeamento que determina como cada classe de negócio deve ser interpretada e como é sua representação em uma tabela de um banco de dados. Isso permite que uma classe possa ser salva em um banco relacional, e posteriormente ter seus dados recuperados deste mesmo banco de dados.
Quando um projeto contém uma grande quantidade de classes de negócio, a quantidade de arquivos de mapeamento é exatamente a mesma. Isso, muitas vezes, pode gerar um problema para a manutenção de uma aplicação.
Sendo assim, é possível por exemplo, determinar que toda propriedade chamada Descricao, deva ter um tamanho de 100 caracteres, e permitir valores nulos. Isso significa que se o modelo desse projeto possuir 20 propriedades com o nome Descricao, em classes diferentes, todas vão ser mapeadas utilizando essa regra.
E é assim que o ConfORM propõe a reutilização de código no mapeamento do NHibernate. A manutenção é portanto muito mais simples, já que deverá ser feita nas convenções e nunca em arquivos individuais de mapeamento.
Como funciona o ConfORM
Como já foi citado, em uma aplicação com NHibernate comum, os mapeamentos são feitos através de arquivos XML.
O exemplo, camada de domínio
Neste exemplo a aplicação foi dividida em camadas. A primeira camada é a camada de Domínio que é totalmente independente do NHibernate, não possuindo nenhuma referência às DLLs do NHibernate ou do ConfORM. É nessa camada que estão definidas as entidades de negócio da aplicação. A Figura 2 ilustra as classes que compõem esse modelo.
EntidadeBase possui as propriedades Id do tipo long, e Version do tipo int. Isso significa que todas as entidades do domínio vão possuir essas duas propriedades, que por sua vez precisarão ser mapeadas. Com isso esse modelo já está impondo uma política única para os IDs das entidades, que deverá ser refletido no banco de dados que servirá de repositório.
A propriedade Version é um recurso do NHibernate para a implementação de concorrência otimista, que garante que quando duas pessoas estiverem editando o mesmo registro, a primeira a concluir a operação é que terá suas alterações persistidas. A segunda pessoa deverá receber uma mensagem alertando-a da situação. Além disso, a EntidadeBase sobrecarrega os métodos Equals e GetHashCode, e implementa os métodos IsTransient e GetUnproxiedType. Esses cinco métodos são necessários para que ao verificarmos se duas entidades são iguais, o .NET considere apenas a propriedade ID para essa verificação, no caso de entidades que já foram persistidas e possuem um ID.
Listagem 1. EntidadeBase do Domínio
public abstract class
EntidadeBase
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVP
Space do autor



0
0
