2017-09-18 1 views
1

現在、イベントソースが使用されているプロジェクトで作業しています。これは私がESを初めて経験したときのことで、時には私がいくつかの問題を解決するために使っているアプローチが正しいかどうかわからないことがあります。イベントソーシング:イベントを無視する正しい方法

このシナリオを検討してください。私は、各アクションが1つ以上のイベントを作成するコマンドを生成するタスクベースのUIを持っています。

ユーザは、ある時点で、ProcessStartedというイベントが生成されたというプロセスを開始できます。そこから彼は集合体に変更を加えることができ、それによって他の出来事を生み出すことができます。

彼は、上記のプロセスを開始する前に、最後のイベントで集約の状態を元に戻すことができます。たとえば、ProcessRevertedというイベントが生成されます。

プロセスが元に戻された場合、そのアグリゲートでさらに多くの操作を行うことができますが、ProcessStartedイベントからProcessRevertedイベントまでプロセスで同意したイベントは考慮してはなりません。集計が再水和した場合

はしたがって、私がしたい:考慮して取られる時間の初めから

  • すべてのイベント。
  • 無視されるイベントはProcessStartedからProcessRevertedまでのすべてのイベントです。
  • ProcessRevertedイベントの後のすべてのイベントを考慮します。

私の目標を達成する最良の方法は何ですか?私はESの文脈で優雅で合っている解決策は考えられません。

私は実装の詳細を探しているわけではないので、私はここにコードを掲載していませんが、私は戦略を探しています。私より多くの経験を持つ人々からアドバイスを得ることを望みます。 ESの力と柔軟性をいかに活用するかを理解するのに役立ちます。

答えて

2

ProcessStartedイベントが適用されるたびに状態のスナップショットを保存することで、これを集約内で実行する必要があります。 ProcessRevertedが適用されると、状態全体がスナップショット内の保存された状態に置き換えられます。イベントは常にが発行された順に適用されるため、これは簡単です。

したがって、外部コンポーネントまたはインフラストラクチャサービスは必要ありません。内部集約ロジックです。

+0

私はどのように示唆しましたか?これは最も論理的な解決策であるようです。ありがとうございます – user449689

+0

@ user449689ようこそ! –

関連する問題