De que se trata o artigo

Neste artigo vamos conhecer um dos recursos presentes na ferramenta ORM NHibernate conhecido como Listeners, que tem por objetivo interceptar o processo de persistência de um objeto mapeado com o ORM, simulando uma espécie de trigger, muito utilizado em banco de dados relacionais.

Em que situação o tema é útil

Este recurso é útil em situações onde desejamos interferir em objetos mapeados com o ORM, em diversos eventos do processo de persistência. Semelhante ao que as Triggers realizam em um banco de dados relacional, os listeners configurados irão atuar sobre os objetos mapeados com o NHibernate, interceptando eventos, como o insert.

Listeners no NHibernate

Listeners pode ser uma ótima alternativa quando queremos implementar uma rotina automática junto ao modelo de negócios mapeado, sem a necessidade de interferir no processo de persistência. Neste artigo, vamos estudar como funciona o recurso de Listeners através de um exemplo prático e ver como isso pode aumentar a produtividade.

O NHibernate é um framework de persistência de dados na versão .NET do conhecido Hibernate da plataforma Java. O objetivo de uma ferramenta ORM (object-relational mapping ou mapeamento de objeto-relacional) é persistir um objeto de nosso modelo (que por sua vez deve estar mapeado) em um banco de dados relacional, ou seja, ter total controle do que irá acontecer entre nossa aplicação e nossos modelos, dispensando a necessidade de escrever comandos SQL para processos simples de escrita e leitura.

Durante o processo de desenvolvimento, a impressão que passa é que estamos lidando apenas com orientação a objetos, pois a persistência é concebida pelo ORM e os comandos SQL são gerados em tempo de execução de acordo com o mapeamento realizado. Isso é uma vantagem, pois agiliza o processo de persistência, onde os desenvolvedores podem focar-se apenas nas regras do negócio em questão.

O NHibernate é gratuito e open-source e pode ser encontrado em seu website oficial (veja seção Links). Até a versão em que este artigo foi escrito, o NHibernate está na versão 3.2 GA. Na seção Links, você encontra a URL para acesso a documentação do framework (utilizada como referência para este artigo).

Neste artigo, vamos entender o que é um Listener e em quais situações tornam-se úteis, vamos exibir um exemplo de uso para explorar este recurso junto ao NHibernate e realizar sua aplicação de forma que não influencie diretamente em nosso modelo de aplicação.

O que é um Listener

Um Listener é um evento que é disparado durante o processo de persistência, ou seja, possuem o poder de interferir no processo de persistência em eventos como Pre Insert, Pre Update, Pre Delete entre outros. Sua implementação dá-se através de interfaces que o NHibernate disponibiliza em sua biblioteca e possuem métodos que irão interferir no processo de persistência. Assim como as triggers, estes métodos possuem a capacidade de acessar o estado anterior e o novo estado do objeto, podendo modificar o valor que será persistido no banco de dados ou até mesmo gerar novas entidades mapeadas com o NHibernate.

A vantagem de utilizar-se Listeners é que, além de tornar o código com maior independência do banco de dados, você ganha todo o poder do .NET Framework para interferir no processo de persistência de uma entidade. Porém, utilize Listeners com cuidado, pois a má utilização do recurso pode afetar outras partes de sua aplicação.

Exemplo com Listener

Conforme citado anteriormente, é necessário criar classes que implementem interfaces para interceptar o processo de persistência, que estão dentro da namespace NHibernate.Event. Para cada evento de persistência existe uma interface específica, possibilitando a mesma classe implementar diversas interfaces, unificando seu código para uma determinada entidade de seu modelo. Uma vez com estas classes prontas, basta adicionar em seu objeto de configuração do NHibernate, através do método SetListener, onde é passado o tipo de evento (como um enum) e uma instância da classe que implementa a respectiva interface, que o ORM se encarregará de utilizá-las.

A Tabela 1 exibe algumas das principais interfaces para a implementação de Listeners com NHibernate.

...

Interface

Método

Característica

IPreInsertEventListener

boolOnPreInsert(PreInsertEvent@event)

Antes de inserir

IPostInsertEventListener

void OnPostInsert(PostInsertEvent @event)

Após a inserção

Quer ler esse conteúdo completo? Tenha acesso completo