Presentación VS Capa de aplicación en DDD

9

Tengo problemas para trazar una línea clara entre la presentación y la capa de aplicación en Diseño controlado por dominio.

¿A dónde deben ir los Controladores, Vistas, Diseños, Javascript y CSS?

¿Está en la capa Aplicación o Presentación?

Y si van todos juntos en la misma capa, ¿qué contiene la otra? Esta vacio?

Matthieu Napoli
fuente

Respuestas:

7

El hecho de que alguien haya creado y llamado "Capa de aplicación" y "Capa de presentación" no significa que su aplicación deba tenerlos. Debe crear capas DESPUÉS de haber creado una cantidad sustancial de código que haya agrupado y desee nombrar a este grupo en aras de la comunicación entre los desarrolladores y la claridad del código.

Desde el punto de DDD. La capa de aplicación es todo lo que no es la capa de dominio. Que incluye lógica de aplicación, presentación y servicios de aplicación.

Eufórico
fuente
2
Gracias, de hecho me hiciste darme cuenta de que para mi caso, separar la Aplicación y la Presentación es inútil. La simplicidad primero!
Matthieu Napoli
Si DDD tiene REST API en lugar de UI en la capa de presentación, REST API sería una aplicación o capa de presentación. Ahora estoy confundido, ya que estaba seguro de que REST API es una capa de presentación ...
Dario Granich
8
En realidad, DDD prescribe cuatro capas en el siguiente orden, de mayor a menor: Presentación, Aplicación, Dominio, Infraestructura. Por lo tanto, la capa de aplicación no incluye "presentación". Además, siempre es una buena idea decidir sobre las capas antes de escribir una cantidad significativa de código, ya que no se trata solo de agrupar el código sino también de restringir la dirección de las dependencias en tiempo de compilación.
Rogério
11

Hay una gran diferencia entre la capa de aplicación y la capa de presentación desde un punto de vista DDD.

Aunque DDD se centra en cómo modelar el dominio utilizando los bloques de construcción DDD y conceptos tales como contextos delimitados, lenguaje ubicuo y demás, sigue siendo vital identificar y separar claramente las diversas capas en su aplicación.

La arquitectura juega un papel importante en la implementación de una aplicación DDD exitosa. Una arquitectura famosa que ganó mucha expectación últimamente es la arquitectura de cebolla:

ingrese la descripción de la imagen aquí

En este diseño, la capa de IU / Presentación y la capa de aplicación están claramente separadas. Fusionar los 2 juntos introduce un acoplamiento estrecho entre 2 capas que tienen claras preocupaciones y responsabilidades separadas.

La capa Presentación solo debe contener la lógica de presentación. Evite las IU inteligentes que saben demasiado. Esto alberga principalmente los Controladores y vistas del MVC, además de CSS, JS, plantillas, formularios y todo lo relacionado con los objetos de respuesta y solicitud.

Las acciones emitidas a través de la presentación se delegan a la capa de aplicación a través de comandos. La capa de aplicación contiene la lógica de la aplicación. Normalmente se asigna a un caso de uso. Contiene LO que el sistema debe hacer para satisfacer un caso de uso. Un servicio de aplicación típico le pedirá a un repositorio que devuelva un agregado y luego invocará una acción sobre ese agregado.

Eche un vistazo al proyecto de muestra del IDDD de Vaughn Vernon

Songo
fuente
2
+1. Así es como he implementado mi proyecto. Inmediatamente, pude obtener ganancias al hacerlo. Como hice abstracción a una capa de aplicación, pude tener múltiples capas de presentación. Por ejemplo, nuestra API web y nuestro sitio web consumen la capa de aplicación que ahorró mucho tiempo y el código duplicado, ya que mi aplicación web no tiene que enmarcar los mensajes hacia y desde la API web y mantiene toda la lógica sincronizada entre los dos.
Sinaesthetic
¿Dónde están entry pointy se composition rootcolocan? Siempre pensé que era una responsabilidad de la Applicationcapa. Pero ahora parece que esto es una Presentationcapa.
Denis535
2

El diseño dirigido por dominio no tiene nada que ver con la capa de presentación o la capa de aplicación. DDD es una metodología cuyo foco principal está en la capa de dominio. Es decir, DDD no impone restricciones con respecto a ninguna otra capa, excepto la capa de Dominio y Su pregunta también podría formularse en el contexto de cualquier otra metodología.

Dicho esto, es muy común usar una arquitectura de cuatro capas para aplicaciones DDD. Aquí hay un ejemplo de una de esas aplicaciones que muestra las capas y su uso previsto: DDDSample Architecture . Entonces, si elige usar esta arquitectura, sus vistas y diseños irían a la capa Interfaces y los controladores, si son independientes de la interfaz, irían a la capa Aplicación.

También podría elegir cualquier otro tipo de arquitectura, ya que he dicho que DDD no impone restricciones. Existen muchos marcos MVC que tienen diferentes estructuras y, sin embargo, también podrían usarse para aplicaciones DDD. Luego, por supuesto, colocaría Sus vistas y diseños en consecuencia.

zafarkhaja
fuente