2

私は仮説的に、マテリアルの購入と販売を行っている "イベントソーシング"(ビジネスイベントを保存)を使用するシステムに取り組んでいます。ある時点で、価格とコスト情報を含むレポートが生成されます。調整のためのリプレイイベント

私のクライアントの1人が私に電話して「コストが間違っている、私にとっては利益からのルールはこの方法です」と言うことを想像してください。

この特定のケースに合わせてハンドラを追加したり、ルールを変更してイベントを再生することができます。

私の質問は、これは正しいアプローチ(または少なくとも良い)ですか?

+0

申し訳ありません、と私のためにこれは実際の使用例です。 –

答えて

1

イベントソースシステムでは、イベントは不変です - 起こったことの単純な事実。出来事の歴史を書き直すことは、単にしないことです[1]。

これらのイベントに基づいて結果を導き出す計算ロジックを変更することは、絶対にやるべきことです(これは、ソーシングが可能な場合でも重要なことの1つです)。

実際にコードを変更するのか、別のアルゴリズムを追加するのかは問題ありません。オリジナルが事実上バグだった場合は、コードを変更してください。そうでない場合は、新しいものを書いてください。

場合によっては(一般的にはアドバイスされません)、元のイベントのすべてを常に処理します。そうであれば、派生ロジックを変更するだけで済みますし、完了しました。

  1. ブロー離れ

    :あなたはイベントを投影し、永続ストアにdenormalised、そして状況がバグを表し、通常のアプローチがあることに決めたきた場合には

    denormalised状態を既存の

  2. リプレイイベントが意図した別の導出を得

ます場合にのみ場に出たことに注意してください今や置き換えられたベースで計算された値を保持する一時的でない非正規化状態ストアを有する。 (非正規化状態をメモリ内の隠し場所に投影することは完全に有効です;そのような場合は、「吹き飛ばし」が簡単です)。

別のシナリオは、スナップショットの最適化を実装した場合です。その場合、別のシナリオでは、非正規化を別の方法で再投影します。

[1]はいそこにそれが正当化できるエキゾチックな例はあるが、それはnonconstructive質問は、私はDDD/CQRSとESに新たなんだit'is場合は0.001パーセントの場合に

+1

これらのイベントに基づいて結果を導き出す計算ロジックを変更することは、絶対にやるべきことです(これは、ソーシングが可能な場合でも重要なことの1つです)。それはそれです、ありがとう –

関連する問題