Tenho problemas para desenhar uma linha clara entre a camada Apresentação e Aplicativo no Design Orientado a Domínio.
Para onde devem ir os arquivos Controladores, Vistas, Layouts, Javascript e CSS?
Está na camada Aplicativo ou Apresentação?
E se eles forem todos juntos na mesma camada, o que contém a outra? Está vazio?
fonte
Há uma grande diferença entre a camada de aplicação e a camada de apresentação do ponto de vista DDD.
Embora o DDD se concentre em como modelar o domínio usando os blocos de construção e os conceitos do DDD, como contextos limitados, linguagem onipresente e assim por diante, ainda é vital identificar e separar claramente as várias camadas do seu aplicativo.
A arquitetura desempenha um grande papel na implementação de um aplicativo DDD bem-sucedido. Uma arquitetura famosa que ganhou muito hype ultimamente é a arquitetura da cebola:
Nesse design, a camada de interface do usuário / apresentação e a camada de aplicativo são claramente separadas. A mesclagem das duas introduz um acoplamento rígido entre duas camadas que têm preocupações e responsabilidades separadas e claras.
A camada Apresentação deve abrigar apenas a lógica da apresentação. Evite UIs inteligentes que sabem demais. Isso abriga principalmente os Controladores e visualizações do MVC, além de CSS, JS, modelos, formulários e tudo o que se relaciona a objetos de resposta e solicitação.
As ações emitidas por meio da apresentação são delegadas à camada de aplicativo por meio de comandos. A camada do aplicativo contém a lógica do aplicativo. Normalmente, ele é mapeado para um caso de uso. Ele contém o que o sistema deve fazer para satisfazer um caso de uso. Um serviço de aplicativo típico solicitará que um repositório retorne um agregado e invoque uma ação nesse agregado.
Dê uma olhada no projeto de amostra do IDDD de Vaughn Vernon
fonte
entry point
ecomposition root
colocados? Eu sempre pensei que era uma responsabilidade daApplication
camada. Mas agora parece que isso é umaPresentation
camada.O Design Orientado a Domínio não tem nada a ver com a camada Apresentação ou a camada Aplicativo. DDD é uma metodologia cujo foco principal está na camada Domínio. Ou seja, o DDD não impõe nenhuma restrição em relação a qualquer outra camada, exceto a camada Domínio, e Sua pergunta também pode ser feita no contexto de qualquer outra metodologia.
Dito isto, é muito comum usar uma arquitetura de quatro camadas para aplicativos DDD. Aqui está um exemplo de um desses aplicativos mostrando as camadas e seu uso pretendido: Arquitetura DDDSample . Portanto, se você optar por usar essa arquitetura, suas visualizações e layouts iriam para a camada Interfaces e os controladores, se independentes da interface, iriam para a camada Application.
Você também pode escolher qualquer outro tipo de arquitetura, como eu disse que o DDD não impõe restrições. Existem muitas estruturas MVC por aí que possuem estruturas diferentes e, no entanto, também podem ser usadas para aplicativos DDD. Então, é claro, você colocaria Seus pontos de vista e layouts adequadamente.
fonte