Leyendo sobre CQRS se habla mucho de notificaciones por correo electrónico, me pregunto de dónde obtener los datos. Imagine un senario donde un usuario invita a otros usuarios a un evento. Para informar a un usuario que ha sido invitado a un evento, se le envía un correo electrónico.CQRS y notificación por correo electrónico
Las medidas concretas podrían pasar como esto:
- Un comando
CreateEvent
con una colección asociada de los usuarios para invitar, es recibido por el servidor. - Se crea un nuevo agregado
Meeting
y se llama a un métodoInviteUser
para cada usuario que se va a invitar. - Cada vez que se invita a un usuario a un evento, se genera un evento de dominio
UserWasInvitedToEvent
. - Un remitente de notificación por correo electrónico recoge el evento de dominio y envía el correo electrónico de notificación.
Ahora mi pregunta es esta: ¿a dónde voy para que la información se incluya en el correo electrónico?
Digamos que deseo incluir una descripción del evento así como también el nombre del usuario. Como esto es CQRS, no puedo obtenerlo a través de mi modelo de dominio; ¡Todas las propiedades de los objetos de dominio son privadas! ¿Debo entonces consultar el lado de lectura? ¿O tal vez mover la notificación por correo electrónico a un servicio diferente por completo?
Es increíble la diferencia que una sola palabra puede hacer. ¡Quise decir consultar el lado LEER de los cour!Estoy al tanto de los conceptos básicos de CQRS :) De todos modos, ¿qué dices es que irías a la tienda de consultas para que los datos se incluyan en el correo electrónico? Puedo ver cómo esto podría plantear un problema, ya que el almacén de consultas podría no estar actualizado, cuando llegue el evento UserWasInvitedToEvent. Una posible solución podría ser un componente/servicio que podría escuchar nuevas reuniones, usuarios e invitaciones y almacenar esos datos, para poder enviar invitaciones? – t0PPy
Sí, eso es a lo que estaba llegando. Hay cosas como Saga en ciertos marcos de mensajería como NServiceBus que le permiten orquestar varios manejadores de eventos que no necesariamente llegan en el mismo orden cada vez. Es posible que desee examinar eso también. Estos actúan como un tipo de flujo de trabajo que le permite esperar toda la información pertinente antes de realizar alguna acción. –
Gracias por su respuesta, disculpe por no volver a esto hace mucho tiempo. Me gusta lo que describes, pero descubrí que prefiero un enfoque ligeramente diferente: enriquecer el evento. – t0PPy