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