Al implementar eventos de dominio, los controladores de eventos solo se deben usar para problemas de dominio; algo que discutirías con los expertos en negocios, o ¿están abiertos para ser utilizados por cualquier cosa que tenga interés en el modelo de dominio?Controladores de eventos de dominio: ¿deberían usarse para las preocupaciones de la capa de aplicación?
Esto probablemente se explica mejor con un ejemplo simple, considere una aplicación de calendario para programar el trabajo para los empleados.
Podríamos tener los siguientes eventos de dominio ...
AppointmentAdded AppointmentRemoved AppointmentContentChanged AppointmentMoved
Tenemos controladores de estos eventos, por ejemplo, cuando una cita se traslada a un tiempo fuera de los empleados Horas de trabajo configuramos una bandera de advertencia.
Por supuesto, hay inquietudes sobre aplicaciones que están interesadas en estos eventos, p. cuando se agrega una Cita al calendario, debemos agregarla a la Unidad de trabajo para que podamos enviar los cambios más tarde.
¿Deberían estas aplicaciones ser consumidores de los eventos de dominio, o deberíamos plantear y manejar eventos de sistema separados en su lugar?
Dudo que promuevan el manejo de eventos en la misma transacción que el agregado que está activando ese evento. Como recuerdo, Udi especifica que es mejor "disparar y olvidarse" por encima de la transacción agregada, especialmente en los casos en que los manejadores de eventos no tienen nada que ver con el dominio (por ej .: mensajes de correo electrónico). "Disparar y olvidar" significa que no te importa si el oyente recibió el mensaje, pero debes preocuparte por cuándo disparar un mensaje (envía el mensaje). Envía un mensaje después de que el agregado haya terminado su trabajo: cambio de estado + persistencia. Así que procuro lanzar un evento después de la persistencia. – Tudor
P.S. El agregado puede disparar un evento en cualquier momento, pero la entrega real del mensaje debe manejarse después de la persistencia agregada (o después de que un comando específico, que desencadenó el evento, haya finalizado). – Tudor