イベント ソーシング ソリューションを使用してイベントを再生しているときに、イベントを状態に適用するときに、どのようなロジックを含める必要があるのか 正確に疑問に思っています。
具体的には、検証について疑問に思っています。たとえば、次のいずれかのステータスになるエンティティがあるとします。
- 記録された
- アクティブ
- 近い
- キャンセル
進行状況は Logged->Active->Close または Logged->Active->Cancelled である必要があります。たとえば、Logged から Close に直接ジャンプすることはできません。
これで、検証はコマンドに含める必要があることを理解しましUpdateState
た。エンティティの現在の状態が目的の状態への遷移を許可するかどうかを確認StatusUpdated
し、イベント ストアに永続化される適切なイベントを生成します。
質問は、それを再生するときはどうすればよいですか? ステータスを更新するだけにするか、同じ検証を実行する必要があります (ステータス遷移要件が変更された場合、追加のロジックを追加しない限り、以前に更新されたエンティティを読み込めないようにする必要があります)。現在のロジックを満たさないエンティティはありますか?
PS。私の理解では、イベントは本質的に、すでに起こったことを「発表」するだけであり(送信者の状態はすでに変更されています)、関係者がそれに応じて反応できるようにするため、それを把握するのに問題があると思います。また、イベントのロード/再生の場合、実際に何かを「アナウンス」するのではなく、その状態を変更する必要があります...