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 |
Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.