quarta-feira, 14 de julho de 2010

Arquitetura para o DDD

Continuando a série sobre o Domain Driven Design iniciada aqui, vamos agora comentar sobre como arquitetar as camadas da aplicação de modo a utilizar um Domain Model rico como a "base" do desenvolvimento.

Antes de mais nada, convém salientar que essa não deve ser vista como a única arquitetura que existe e que irá atender a todos os sistemas e situações do mercado. Trata-se apenas da arquitetura mais adequada a um projeto que trabalhe sob as premissas do DDD.

As camadas são representadas como abaixo:




Explicação sobre as camadas:



É importante dizer que não considero a camada Application como mandatória; ela é criada apenas se realmente adicionar valor à aplicação. Como a camada Domain é bastante rica em funcionalidades, muitas vezes não é necessário implementar mais essa divisão.

A criação de um Domain Model  traz uma série de vantagens para aplicações de larga escala e/ou complexas. Como bem disse Martin Fowler em PoEAA: "se você utilizar DDD para um projeto, você provavelmente irá cogitar utilizar a mesma técnica para outros (mesmo para os pequenos)."

Um design focado na criação de um Domain Model tem melhor manutenção no longo prazo devido à clareza da relação entre o negócio e a implementação. Além disso, é uma importante ferramenta para evitar a duplicação de código. Também aumenta a testabilidade do sistema.


4 comentários:

  1. Vini,

    Eu só acrescentaria, apesar de repetitivo, na cama "User Interface" que não DEVE existir regra de negocio nesta camada.
    Muitas pessoas criam um modelo excelente, mas pecam em deixar uma pequena regra de negocio na interface, somente por comodismo. Temos que ser firmes, até quando possível, em nossa cultura.

    ResponderExcluir
  2. Bem observado velho!

    Manter a disciplina é fundamental para um trabalho profissional.

    Abs

    ResponderExcluir
  3. Vinicius,

    Em termos conceituais existe alguma diferença entre a camada Domain e a camada de Negócios que conhecemos? Ou é só uma questão de nomenclatura?

    ResponderExcluir
  4. Fala Fabricio,

    Existe diferença sim. O termo "camada de negócio" é algo que é usado de forma mais abrangente, geralmente para designar qualquer ação referente à funcionalidade básica de uma determinada aplicação.

    Imagine uma serviço que controle transacionalmente a transferência de fundos entre 2 contas bancárias. O serviço estaria numa camada mais acima (Application) e teria acesso a objetos do tipo C
    onta (Domain)para efetivar a transferência.

    A camada Application controlaria a transação gerada e o Domain o estado dos objetos.

    Mais ou menos isso...

    Mais dúvidas, me pergunte.

    Abs

    ResponderExcluir

Related Posts with Thumbnails