DDD: ¿Dónde colocar los controladores de eventos de dominio?

7

¿Podría decirme su opinión de qué capa es la correcta para colocar controladores de eventos de dominio en DDD? Por ejemplo, tengo un servicio de aplicación para agregar un nuevo contrato y me gustaría enviar una notificación por correo electrónico a la persona de contacto, cuando el contrato se haya agregado, también lo es el servicio de aplicación o dominio del servicio de dominio remitente (que maneja el evento Contratado por Contrato). otra cosa?

    
pregunta Toni 28.07.2016 - 10:54

3 respuestas

4

Coloco los controladores de eventos de dominio en la capa de aplicación.

El evento de dominio es una manera de decirle a las capas externas (o al mundo exterior) que algo sucedió en la capa de dominio. Qué hacer con el evento depende de la aplicación. La aplicación puede notificar al usuario sobre los cambios o puede llamar a otro dominio para hacer algo. La aplicación es responsable de organizar las operaciones de dominio en respuesta a las acciones del usuario, las solicitudes web o los eventos de dominio.

    
respondido por el Eugene Khudoy 01.12.2016 - 17:41
2

El libro de DDD original (Evans 2004) explica la capa de aplicación como una capa delgada que ejerce objetos de dominio en respuesta a la acción del usuario. Los controladores de eventos típicos para eventos de dominio, por lo tanto, no pertenecen a la capa de aplicación.

Puede tener sentido colocar algunos de ellos en la capa de dominio, siempre y cuando no rompas las capas creando una dependencia hacia arriba.

Si tiene una capa de infraestructura que se encuentra debajo de la capa de dominio, el controlador de eventos no puede estar allí porque rompería la capa.

Si tiene una capa de adaptadores que está por encima de la capa de dominio, puede crear un controlador de eventos allí. Consulte arquitectura hexagonal .

    
respondido por el Gudmundur Orn 04.08.2016 - 04:46
1

Coloco los controladores de eventos de dominio en la capa de dominio como una interfaz de dominio IDomainEventHandler .

Un ejemplo de un controlador de eventos de dominio es una política que se suscribe a cierto evento de dominio para inicializar una nueva transacción (por ejemplo: para activar un nuevo comando de dominio), por lo tanto, tiene sentido tenerla en la capa de dominio, ya que está relacionado con la lógica empresarial.

Podríamos pensar en un ejemplo donde se confirma un pedido y, por lo tanto, se debe crear una solicitud de factura. Tenemos un evento OrderConfirmedEvent que ha sucedido. Una política en nuestro dominio estaría a cargo de suscribirse a este evento y crear un comando de dominio RequestInvoice que será manejado por el controlador de comandos y tratado por él en consecuencia.

Si tuviéramos este controlador de eventos en la capa de la aplicación, significaría que la capa de la aplicación, además de organizar las acciones del usuario, ejecutaría cierta lógica de negocios, lo que parece incorrecto.

Sin embargo tenemos

    
respondido por el iberodev 03.08.2018 - 21:57

Lea otras preguntas en las etiquetas