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.
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.
Vini,
ResponderExcluirEu 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.
Bem observado velho!
ResponderExcluirManter a disciplina é fundamental para um trabalho profissional.
Abs
Vinicius,
ResponderExcluirEm 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?
Fala Fabricio,
ResponderExcluirExiste 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