次のオブジェクトモデルを検討してください(->>はコレクションを示します)。
顧客->注文
Orders->> OrderLineItems-> Product {Price}
アプリは注文の処理に重点を置いているため、特定の基準に一致するすべての注文を示すほとんどのタイムテーブルがUIで使用されます。99%の時間、私はLineTotalsの合計のみを表示することに関心があり、個々のLineTotalsは表示しません。
さらに考えてみると、各注文に複数の支払い(電信送金、小切手、クレジットカードなど)が関連付けられている可能性があります。これも、受け取った金額の合計にのみ関心があります。
データベースに注文を照会するとき、すべての注文を選択してから、注文ごとにその支払いとLineItemを選択したくありません。
私のアイデアは、各注文を「ステータス」オブジェクトに関連付けて保存し、注文のすべての合計とステータスをキャッシュし、桁違いにクエリのパフォーマンスを向上させ、未払いの注文、有料の注文、未払いの注文などのクエリシナリオをサポートすることでした。
これにより、ドメインロジック(注文が支払われたと見なされる場合など)がデータベースクエリにリークするのを防ぎます。ただし、合計を最新の状態に保つ責任があります。システムには通常、支払いの入力または統合、注文の作成/変更など、それが発生する必要がある明確に定義されたポイントがあります。
これまで、アイテムが追加または削除されたとき、またはアイテムの特定のプロパティが更新されたときにステータスの再計算をトリガーするObservableCollectionsを使用してきました。私は、dddの観点からすべての論理をどこに置くべきかを自問します。すべてのイベントワイヤリングと計算ロジックを集約ルートに強制するのは奇妙に思えます。