Se dice que en CQRS es fácil corregir un error, simplemente se vuelve a implementar y luego se reproducen los eventos.
Pero, ¿qué pasaría si uno de los eventos causara que un sistema externo que no esté bajo su control "envíe un artículo" al cliente si solo repite los eventos, el artículo se enviará dos veces?
¿Cómo resuelves eso?
Del artículo de búsqueda de eventos de Martin Fowler :
Por lo tanto, cuando necesite restaurar el estado de su sistema a un determinado momento, vuelva a reproducir el estado almacenado , no los controladores de eventos, hasta ese momento.
Dicho esto, si solo está trabajando con datos de estado, no debería haber ningún efecto en el sistema externo. A menos que tenga activadores o observadores en su tienda de eventos, en cuyo caso debe deshabilitarlos mientras dure la restauración. Dado que usted dice que no tiene control sobre el sistema externo, no debería haber ningún intento de restaurar su estado utilizando la API expuesta, ya que no sabe qué efectos secundarios puede tener en su sistema. Si la restauración coloca el sistema en un estado intermedio (por ejemplo, debido a operaciones fallidas en el sistema externo), esto no debería caer dentro de las responsabilidades de una repetición de eventos.
fuente
Para elegir un ejemplo específico, consideremos cómo podría funcionar un enfoque "al menos una vez" de los efectos secundarios.
Entonces, el modelo de dominio rastrea lo que hay que hacer; pero deja el hacer real a la aplicación
En el contexto de ejecutar un comando, la idea básica se ve igual. Los efectos secundarios reales ocurren fuera de la transacción que actualiza el modelo.
Entonces, las pruebas unitarias para su modelo podrían verse más o menos así
Los puntos principales aquí son
fuente