DDDから : ソフトウェアの中心にある複雑さに取り組む( pg. 177 ):
処理イベントを追加するときに配送履歴を更新する必要があるため、貨物の AGGREGATE がトランザクションに関与します。
a)ページのさらに下の作成者は代替ソリューションを提案しますが、それでも-上記の抜粋の作成者は、このプロパティがアクセスされるたびに(リポジトリを介して)データベースにプロパティクエリを実行することにより、関連付けを実装することを本質的に提案していませんか?DeliveryHistory.Events
b) 著者によって「提案された」実装は、遅延読み込みの実装方法とほぼ同じであるため (遅延読み込みは、最初にデータが必要になったときにのみクエリを実行し、それをキャッシュすることを除いて)、次のことも尋ねます。
多くの人は一般的に遅延読み込みに反対していますが、関連するエンティティが同じ集計内に存在する場合は、遅延読み込みを使用すべきではないと思います。
集計が変更されたときに不変条件を適切に適用できないため、関連するデータがアクセスされない場合 (したがって、取得されない場合)、この整合性が損なわれる可能性があるという理由は?
アップデート:
a)
DeliveryHistory.Events コレクションは、DeliveryHistory エンティティがリポジトリによって読み込まれるときに読み込まれます。遅延読み込みを介して読み込むこともできます。この場合、ORM は、反復時にデータベースを呼び出すコレクション プロキシを挿入します。
しかし、作成者は、 がアクセスされるたびに (またはおそらく が呼び出されるたびに)イベントを照会するという 3 番目のオプションを提案していませんか?DeliveryHistory.Events
DeliveryHistory.GetEvents()
b)
これは遅延読み込みに似ていますが、重要な違いは、リポジトリ クエリを使用すると、オブジェクト モデルの Events プロパティを省略できることです。これにより、DeliveryHistory エンティティの「フットプリント」が削減されます。
私は-「遅延読み込みに似ている」とは、イベントが要求されるたびにデータベースからイベントが取得される設計を指していると思いますか?!
II - とにかく、DeliveryHistory.Events
プロパティを省略した場合 (おそらく a の代替として定義しない場合DeliveryHistory.GetEvents()
)、作成者によって提案された設計をどのように実装しますか (元の投稿で述べたように、ページ作成者のさらに下にあることを認識しています)より良い代替案を提案しましたか?
ありがとうございました