8

私が見たすべての CQRS の例で、ドメイン イベントは読み取りモデルの更新をトリガーしますが、それ以外は何もしません。しかし、ドメイン イベントがドメイン内の他の変更を引き起こしたい場合はどうでしょうか?

たとえば、次の要件があるとします。

  • 「口座を解約する」ボタンがクリックされた場合、口座を解約する
  • 口座の支払いが完了したら、口座を閉鎖します
  • アカウントが閉鎖されたら、アカウント所有者を「特別」としてマークします

これを処理する最良の方法は何ですか?

  1. Account.Close() で AccountClosed イベント作成し、所有者を「特別」としてマークします。
  2. 所有者を「特別」としてマークする AccountClosed ハンドラーを作成する
  3. MarkOwnerAsSpecial コマンドを送信する AccountClosed ハンドラーを作成する
  4. アカウントを閉じるコマンド ハンドラーも、アカウント所有者を「特別」としてマークするようにします。
4

1 に答える 1

9

この正確な目的のために、Sagasと呼ばれる特定の概念があります。Rinat Abdullin によるこの記事から始めて、そこから進んでください。

https://blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-i-of-ii/

オプション 3 は、この概念に近づきます。サガは基本的に、新しいコマンドを発行するイベント ハンドラーです。イベントが元の集計以外の集計を操作するのではなく、ビジネス ルールに従ってイベントを処理し、新しいコマンドを送信する必要があります。これがサガが行うことです。

于 2012-01-06T20:49:59.653 に答える