コースの馬。イベントソーシングと変更を追跡するとき
私の質問は、私は、ユーザーがおそらく
を行うようにしています何のためにイベントを作成する必要があります。エンティティ境界自体の中では、それほど重要ではありません。外部からのその歴史を見て、イベントからの変化のコンテキストを認識できることは非常に便利なことがあります。ポップ/サブを考える。イベントを記述しているエンティティを取得したら、それらのイベントの購読を開始したいと思う可能性があります。
たとえば、顧客プロファイルのアドレスの変更を考えてみましょう。それは、以前のデータ入力(顧客の経験を改善するための矯正可能なシステム上の問題を探しているビジネスのエラー率を追跡する)や顧客の移転(この場合、新しい既存のポリシーに対して新しいアドレスを検討するために監査を開始する)。
すべてが単一のAddressChangedイベントの傘下にある場合、柔軟性が失われます。最良のケースでは、データだけから変化のコンテキストを推測しようとしています。
一方、その柔軟性によって価値が提供されない場合は、その必要はありません。
つまり、イベントソーシングCRUDは奇妙です。第一級市民としての変更を評価しない場合、なぜエンティティにエンティティがあるのでしょうか?集約状態の書き込みはずっと簡単です。
イベントの書き込みと集約状態の書き出しの違いは何ですか?
たくさんありません。それらを読んでもう少し異なっている。
控えめに言えば、集約状態を書き出すことは、集計が現在どのように表示されているのかに似ています。これは通常、現在の状態をDTOにシリアライズする持続性コンポーネントによって行われます。例えば、我々は後に、私たちは単に永続的ストアからJSON形式の文書を取得し、オブジェクトマッパーは仕事に行かせ台帳を再作成するにはJSONドキュメント
{ "date" : "2016-07-06"
, "amount" : 40
, "cleared" : null
}
とLedger
の現在の状態を表すことができます。イベントを言っているの歴史を、書き出す
は、後で台帳を再作成するには、より
[ { "event_type" : "LedgerCreated"
, "data"
: { "date" : "2016-07-06"
, "amount" : 40
}
}
, { "event_type" : "LedgerCleared"
, "data"
: { "reason" : "Because I said so"
}
}
, { "event_type" : "ClearingRemoved"
, "data"
: {}
}
]
見えるように起こっている、我々は永久的な店舗のうち、JSON形式のドキュメントを取得する必要があります、オブジェクトマッパーを使用して順序付けられた一連のイベントを作成し、最初の「シード」状態の元帳を作成してこれらのイベントを新しい元帳エンティティに再適用して、すべての変更を再生することにより、その歴史の中で。
ありがとう、何かを明確にすることはできますか?イベントの書き出しと集約状態の書き出しの違いは何ですか? – ciscoheat
@ciscoheatイベントソーシングの全体のポイントです。エンティティの最新の状態を保存するのではなく、イベントの完全な履歴を保存します。 VoiceOfUnreasonが意味することは、イベントがちょうど国家よりも豊富な情報を提供するということです。しかし、CRUDの文脈では、あなたが得るのは非常に一般的なCRUDイベントであるため、ESは過剰なものになる可能性があります。 – guillaume31