Domänenereignisse, die andere Domänenänderungen in CQRS auslösen

8

In allen Beispielen von CQRS, die ich gesehen habe, lösen die Domain-Ereignisse Aktualisierungen des Lesemodells aus, aber nichts anderes. Aber was ist, wenn Sie möchten, dass ein Domänenereignis andere Änderungen in der Domäne verursacht?

Nehmen wir beispielsweise an, Sie haben folgende Voraussetzungen:

  • Wenn Sie auf die Schaltfläche "Konto schließen" klicken, schließen Sie das Konto
  • Wenn das Konto bezahlt ist, schließen Sie das Konto
  • Wenn ein Konto geschlossen ist, markieren Sie den Kontoinhaber als "special"

Was ist der beste Weg, damit umzugehen?

  1. Machen Sie Account.Close () erstellen Sie ein AccountClosed-Ereignis und markieren Sie den Eigentümer auch als "special"
  2. Machen Sie einen AccountClosed-Handler, der den Eigentümer als "special" markiert
  3. Erstellen Sie einen AccountClosed-Handler, der einen MarkOwnerAsSpecial-Befehl sendet
  4. Lassen Sie die Befehlshandler, die das Konto schließen, auch den Kontoinhaber als "special"
  5. markieren
Trystan Spangler 06.01.2012, 20:41
quelle

1 Antwort

9

Es gibt ein spezielles Konzept namens Sagas für genau diesen Zweck. Beginnen Sie mit diesem Artikel von Rinat Abdullin, dann gehen Sie von dort.

Ссылка

Ihre Option 3 kommt diesem Konzept nahe. Eine Saga ist im Grunde ein Event-Handler, der neue Befehle ausgibt. Sie möchten nicht, dass ein Ereignis Aggregate außerhalb des Ursprungs bearbeitet, sondern das Ereignis behandelt und neue Befehle gemäß Ihren Geschäftsregeln einreicht. Das ist, was die Sage tun wird.

    
Dennis Traub 06.01.2012, 20:49
quelle