Arquitetura em prática

por Fabio Margarito Martins de Barros

Unity of work

transaction Tudo pessoal?

Outro dia uma amigo me questionou sobre a utilidade do padrão Unity of Work (para facilitar, chamarei de UoW), na visão dele, o padrão não faz sentido e teria pouca utilização. Será que não tem nenhum valor? Para não respondê-lo por e-mail, resolvi postar a resposta.

Segundo Martin Fowller o padrão UoW é definido como:

Mantains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.

em tradução livre:

Mantém uma lista de objetos afetados por uma transação de negócio, coordena a efetivação das mudanças e soluciona problemas de concorrência.

Para facilitar a compreensão do UoW, trazendo um pouco para a realidade de muitos, imagine o processo de negócio de emissão de uma nota fiscal (processo extremamente simplificado):

  • Emissão da nota fiscal
  • Baixa de itens do estoque
  • Criação de contas a receber

O processo de negócio somente será efetivado, se as três etapas forem concluídas. Como resolvemos este tipo de situação?

Geralmente abre-se uma transação no banco de dados, e se todas as etapas forem concluídas com sucesso, efetivamos a transação, caso contrário, abortamos, ou seja, voltamos ao estado anterior a transação.

O UoW é o cara que abre a transação, efetiva ou aborta, só que trabalhamos com o controle dos objetos (quais foram alterados, quais foram inseridos, excluídos , etc..).

Em um modelo orientado a objetos do nosso problema, a nota fiscal é um objeto, quando emito uma nota, no final das contas, instanciamos um objeto nota e incluímos o estado desejado (número da nota, data de emissão, lista de produtos (outro objeto),etc..) , portanto, a nota torna-se um novo objeto passível de ser persistido no banco de dados.

Se for uma alteração, basicamente retornamos os dados do banco, preenchemos um objeto do tipo nota, alteramos o estado do objeto, e este, posteriormente é persistido no banco. Com a exclusão, o processo é similar. Conseguiram ligar  a expressão “Mantém uma lista de objetos afetados por uma transação de negócio” , com o exemplo exposto? Em nosso exemplo, teríamos outros objetos que serão gerenciados pelo UoW, e por ele conhecer todos, e os respectivos estados, consegue saber se houve algo errado, e abortar, se necessário.

Para a criação de UoW, Fowller em seu artigo sugere a seguinte interface:

unitOfWorkInterface

Sacaram onde o objeto nota fiscal poderia ser incluso em cada situação?

Outro ponto importante, e faz parte da definição do UoW, é o controle de concorrência, que é outro assunto extremamente complicado e extenso, mas posso citar um exemplo:

Imagine duas pessoas, uma sem conhecimento da outra, alterando dados de um mesmo cliente, o que fazer no momento da persistência? Há algumas técnicas, como o bloqueio pessimista, ou seja, no momento que eu resgatar um cliente eu bloqueio este cliente, impedindo que qualquer outro o altere, ou , bloqueio otimista, onde faço a checagem se houve alguma alteração no momento da persistência. Enfim, implementar tudo isto não é algo tão trivial, e como o conceito padrão de projeto, é a solução para um problema recorrente, podemos imaginar que alguém já implementou isto, correto? Com certeza, vejamos alguns exemplos:

  • NHibernate, um ORM opensource bem conhecido: No NHibernate, temos o objeto Session, qual a função do Session? Ele abre a transação e monitora todos os objetos utilizados no processo de negócio.
  • Entity Framework, ORM desenvolvido pela Microsoft: No Entity Framework, temos um objeto similar ao Session do NHibernate, o datacontext.
  • DataSet do .Net Framework: Um dataset, é um banco em memória e desconectado do banco de dados, trocando em miúdos, podemos retornar dados de um banco, alteramos, incluímos dados em memória  e solicitamos que as alterações sejam persistidas.

Conclusão

Não feche os olhos aos padrões, entendê-los é importante, fazem parte do nosso dia-a-dia, e são a melhor forma de reuso de conhecimento gerado a partir do sofrimento de muitos.

Fala sério, também fica bonito em uma reunião técnica, rs…

Quer aprender mais?

[]’s

Fabio Margarito

Posted: Jun 26 2010, 03:21 by fabiomargarito | Comments (28) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Codificando .Net 2010 e DotNetArchitects

Ontém ocorreu o evento Codificando .Net 2010, e foi bem bacana. Cheguei logo cedo, e saí quase as 19:00. O evento inicou com o KeyNote do Facunte, sobre o Windows Phone e SilverLight 4. Como sempre a palestra do Facunte foi bem bacana, um cara bastante extrovertido e diverto. Em seguida um overview das tecnologias que chegaram em 2010, como o Visual Studio 2010, novidades do ASP.Net 4.0 e .Net Framework 4.0 com a equipe de líderes do Codificando .Net. As 14:00 teve inicío da Joint Venture entre Codificando .Net e DotNetArchitects. A equipe do Codificando nos cedeu uma sala para uma sessão aberta para discutirmos soluções de arquitetura na plataforma .Net. Foi uma discussão bem bacana, com muita gente inteligente e a participção da cúpula do time DotNetArchitects, como o Leandro Daniel, Emanuel Brandão, Vinícios Quaiato, Victor Cavalcante , Daniel Fonseca e eu. Em paralelo, o Victor estava palestrando sobre MVC e Jquery com maestria(logo que acabou nossa discussão de arquitetura, também fui conferir a palestra). A estrutura do evento foi muito bacana, muita gente(em torno de 300 pessoas) deixando de lado o fim de semana de diversão, para compartilhar conhecimentos e reencontrar amigos. Equipe Codificando, em nome do DotNetArchitects, agradecemos a oportunidade, e parabéns pelo evento.

[]’s

Fabio Margarito

Posted: Jun 20 2010, 19:47 by fabiomargarito | Comments (52) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Apresentação sobre MEF no dotNetArchitects

Tudo bem galera?

No dia 12/06 tivemos uma apresentação sobre MEF, infelizmente tivemos problemas com a internet e não foi possível transmitir ao vivo a apresentação. Mas sem problemas, vou preparar um webcast com o conteúdo dado. De qualquer forma, segue a minha apresentação e a demo apresentada. A demo foi desenvolvida pelo Alexandre Santos Costa, o Magoo, deficiente visual com grande conhecimento e que contribui bastante com a comunidade.

Demo da Apresentação

Baixar

[]’s

Fabio margarito

Posted: Jun 20 2010, 19:07 by fabiomargarito | Comments (13) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:
Php Haber Scripti : Maltepe Bilgisayar