私はCQRSとイベントソーシングを使って最初の試みに飛び込んでいます。いくつかのガイダンスが必要です。SOスタイルのレピュテーションシステムを実装したいと思います。これは、このアーキテクチャに最適のようです。
例としてSOを維持します。質問が賛成されたとすると、UpvoteCommand
これにより質問の合計スコアが増加し、が発生しますQuestionUpvotedEvent
。
著者のユーザーアグリゲートはQuestionUpvotedEvent
、レピュテーションスコアを上げる可能性のあるサブスクライブする必要があるようです。しかし、このサブスクリプションをいつ/どのように行うかは私にはわかりませんか?Greg Youngsの例では、イベント/コマンドの処理はglobal.asaxに組み込まれていますが、これには集約IDに基づくルーティングは含まれていないようです。
QuestionUpvotedEvent
すべてのユーザーアグリゲートが正しくないと思われるすべてをサブスクライブするように見えます。そのようなスキームを機能させるには、イベントハンドラーは、そのユーザーが投票されたばかりの質問を所有しているかどうかを識別する動作を示す必要があります。Greg Youngは、これをイベントハンドラーコードに含めるべきではなく、単に状態の変更を伴うべきであると示唆しました。
ここで何が間違っているのですか?
どんなガイダンスでも大歓迎です。
編集
ここで話しているのは、質問とユーザーの集合体間の集合体間の通信だと思います。私が見ることができる1つの解決策は、QuestionUpvotedEvent
がサブスクライブされていることです。これによりReputationEventHandler
、対応するユーザーARをフェッチし、このオブジェクトで対応するメソッドを呼び出すことができますYourQuestionWasUpvoted
。これにより、ユーザー固有のUserQuestionUpvoted
イベントが生成され、将来の再生機能が維持されます。これは正しい方向に向かっていますか?
編集2
こちらのグーグルグループに関する議論も参照してください。