イベント ソーシングを使用して境界付けられたコンテキストを実装していますが、問題が発生しました。サッカーの試合をモデル化していて、個々の得点 (誰が得点したかなど) と全体の得点の両方に関心があるとします。したがって、Match 集計ルートがある場合、理想的には、GoalScored および ScoreChanged と呼ばれるイベントを発生させたいと考えています。このようにドメインから明示的に記述されたスコアが必要な理由は、多くの異なるリスナーと、おそらく他の境界付けられたコンテキストがすべて同じことを計算することを望まないからです。
これは単純に思えますが、Match オブジェクトには新しいゴールを追加する Goal() メソッドがあります。イベント ソーシングの精神では、これは Match 状態を直接変更するのではなく、Match 内で処理される GoalScored イベントを発生させ、その後状態を変更します (イベントは denormalizer にプッシュされます)。ScoreChanged を発生させるという点では、GoalScored イベントが処理されるまでスコアは実際には変化していないので、そのイベント (ScoreChanged) に応じて別のイベントを発生させて、イベントを効果的に連鎖させますか? 私はそうは思いません。集合ルートがイベント ストアからリロードされると、最初は、各 GoalScored に応答して、毎回多くの余分なイベントが作成されます。
また、GoalScored を発生させるコマンド ハンドラーでスコアがどうなるかを考えることも考えました。次に、コマンド ハンドラーで両方のイベントを発生させることができます。私は本当にそれをしたくないのですが、それは「正しく」ないようです。サッカーのスコア計算は簡単ですが、他のゲーム (クリケットなど) ではさらに多くの作業が必要になります。
ゴールとスコアの両方を GoalScored イベントに入れることもできますが、これは十分公平ですが、やはり正しくないようです。スコアは、GoalScored イベント自体とは何の関係もありません。
イベント ソーシングについて議論する際に使用されるすべての例は、e コマースの顧客/注文ドメインを使用しているように見えますが、これと同様のケースは見たことがありません。
このような状況に対処した経験のある人はいますか?
ありがとう