¿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 servicio de dominio del remitente del correo electrónico (que maneja el evento ContractAdded) o ¿algo más?
13
El libro original DDD (Evans 2004) explica la capa de aplicación como una capa delgada que ejercita 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 que no rompa las capas creando una dependencia ascendente.
Si tiene una capa de infraestructura que está debajo de la capa de dominio, el controlador de eventos no puede estar allí, ya que rompería las capas.
Si tiene una capa de adaptadores que está por encima de la capa de dominio, puede crear un controlador de eventos allí. Echa un vistazo a la arquitectura hexagonal .
fuente
Coloco controladores de eventos de dominio en la capa de dominio como 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 tenerlo en la capa de dominio ya que está relacionado con lógica de negocios.
Podríamos pensar en un ejemplo en el que 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 se encargaría de suscribirse a este evento y crear un comando de dominioRequestInvoice
que será manejado por el controlador de comandos y que se tratará en consecuencia.Si tuviéramos este controlador de eventos en la capa de aplicación, significaría que la capa de aplicación, además de orquestar las acciones del usuario, ejecutaría cierta lógica empresarial, lo que parece incorrecto.
Sin embargo tenemos
fuente