2012-01-06 14 views
8

En todos los ejemplos de CQRS que he visto, los eventos de dominio desencadenan actualizaciones en el modelo de lectura, pero nada más. Pero, ¿qué ocurre cuando desea que un evento de dominio cause otros cambios en el dominio?Eventos de dominio que desencadenan otros cambios de dominio en CQRS

Por ejemplo, suponga que tiene los siguientes requisitos:

  • cuando se hace clic en el botón "Cerrar cuenta", cerrar la cuenta
  • cuando la cuenta se paga apagado, cerrar la cuenta
  • cuando una cuenta está cerrada, marque el propietario de la cuenta como "especial"

¿Cuál es la mejor manera de manejar esto?

  1. Hacer Account.Close() crear un evento AccountClosed y marcan también el propietario de "especial"
  2. Hacer un controlador AccountClosed que marca el dueño como "especial"
  3. Hacer un controlador que AccountClosed enviar un comando MarkOwnerAsSpecial
  4. Hacer los controladores de comandos que cierran la cuenta también marcan el titular de la cuenta como "especial"

Respuesta

9

Hay una específica c oncept llamado Sagas para este propósito exacto. Comience con este artículo de Rinat Abdullin, luego vaya desde allí.

http://abdullin.squarespace.com/journal/2010/9/26/theory-of-cqrs-command-handlers-sagas-ars-and-event-subscrip.html

Su opción 3 se acerca a este concepto. Una saga es básicamente un controlador de eventos que emite nuevos comandos. No querría que un evento manipule agregados fuera del que se origina, sino que más bien maneje el evento y envíe nuevos comandos de acuerdo con las reglas de su negocio. Esto es lo que hará la saga.

+0

Lo he leído antes, pero era tan abstracto que no entendía cómo las sagas básicamente convierten los eventos en comandos. Encontré otro artículo de 2 partes que explica eso y tiene muestras de código. http://blog.jonathanoliver.com/2010/09/cqrs-sagas-with-event-sourcing-part-i-of-ii/ –

+0

@TrystanSpangler Ese enlace da un 404 y parece que se ha reubicado en http://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-i-of-ii/ – Melle

Cuestiones relacionadas