La diferencia entre un comando y un evento en la comunicación del bus me parece un poco vaga. Sé que los comandos deben ejecutarse solo una vez, mientras que un evento se puede manejar varias veces, pero aún no estoy seguro de cuándo usar un comando o un evento.
Veamos un ejemplo:
Cuando un nuevo usuario se registra en una aplicación web, debemos crearle una cuenta y enviarle un correo electrónico de confirmación.
Creación de la cuenta : este parece ser el lugar correcto para enviar un mensaje CreateUserCommand
al bus y dejar que un componente especializado lo maneje.
¿O tal vez esto ni siquiera debería implementarse con una comunicación de bus asíncrono? Queremos que el usuario pueda iniciar sesión en la aplicación de inmediato. Con el bus no tenemos garantía de cuándo se ejecutará el comando.
Envío de correo electrónico : después de que el componente crea la cuenta, puedo ver 2 posibilidades
- Enviar otro comando al bus
SendConfirmationEmailCommand
- Publica un evento
UserAccountCreatedEvent
Y luego deje que el componente del remitente del correo electrónico lo tome y haga su trabajo.
Por un lado, quiero que el correo electrónico de confirmación se envíe solo una vez (use un comando), por otro lado, creo que puede haber múltiples componentes interesados en los usuarios recién registrados. Un registrador o tal vez un remitente de SMS.
¿Cómo lo implementaría?
fuente