2012-01-06 11 views
8

これまでに紹介したCQRSのすべての例では、ドメインイベントによって更新されたモデルは更新されました。しかし、ドメインイベントでドメイン内の他の変更を引き起こしたいときはどうでしょうか?例えばCQRSで他のドメインの変更を引き起こすドメインイベント

は、次の要件があるとします

「クローズアカウント」ボタンをクリックすると
  • 、アカウントを、アカウント、アカウントがオフに繰り出される
  • を閉じる閉じるを
  • ときアカウントが閉鎖されている場合は、アカウントの所有者を「特別」とマークしてください。

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

  1. (Account.Closeを作る)AccountClosedイベントを作成するも
  2. 「特別」として所有者をマーク「特別な」
  3. として所有者をマークAccountClosedハンドラはそのAccountClosedハンドラを作成してくださいアカウントを閉鎖コマンドハンドラはまた、特定のcがあります

答えて

9

「特別」としてアカウント所有者にマークを付けてください

  • MarkOwnerAsSpecialコマンドを提出この正確な目的のためにSagasと呼ばれるoncept。 Rinat Abdullinの記事から始めて、そこから行ってください。

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

    あなたのオプション3は、このコンセプトに近づきます。サガは基本的に新しいコマンドを発行するイベントハンドラです。イベントを発生させずに集計を操作するのではなく、イベントを処理し、ビジネスルールに従って新しいコマンドを送信することを望みます。これは、サガがすることです。

  • +0

    これまで私はそれを読んだことがありましたが、それは抽象的なので、サガは基本的にイベントをコマンドに変換する方法を理解できませんでした。私はそれを説明し、コードサンプルを持っている別の2部の記事を見つけました。 http://blog.jonathanoliver.com/2010/09/cqrs-sagas-with-event-sourcing-part-i-of-ii/ –

    +0

    @TrystanSpanglerそのリンクは404を与え、http://に移動したようです/blog.jonathanoliver.com/cqrs-sagas-with-event-sourcing-part-i-of-ii/ – Melle

    関連する問題