DDDルールに従うと、アグリゲートは外部オブジェクトがそのメンバーへの参照を保持することを許可しないようにする必要があります。
集計「請求書」が請求書とその詳細をカプセル化している場合。詳細を表示したりレポートを生成したりできるように、集計請求書はどのように情報を提供する必要がありますか?
DDDルールに従うと、アグリゲートは外部オブジェクトがそのメンバーへの参照を保持することを許可しないようにする必要があります。
集計「請求書」が請求書とその詳細をカプセル化している場合。詳細を表示したりレポートを生成したりできるように、集計請求書はどのように情報を提供する必要がありますか?
参照を保持するDDDのコンテキストでは、ある種のデータベース参照を意味します。データベースからアグリゲートをロードすると、そのメンバーへのランタイム参照を取得できないという意味ではありません。アグリゲートメンバーとのすべての相互作用はアグリゲートを通過し、それによって一貫性と整合性の境界としての役割を果たすという考え方です。ただし、表示とクエリの目的では、クエリ固有のクラスを使用してクエリデータを表し、集計を表すために使用されるクラスとは異なる読み取りモデルパターンを使用します。これにより、アグリゲートは、クエリの可能性を気にすることなく、その動作に集中できます。CQRS+イベントソーシングを使用している場合、次に、集約にはパブリックデータメンバーはなく、動作メソッドのみがあります。この場合、クエリは、アグリゲートによって生成されたイベントに基づく予測として実装されます。
クライアントが値オブジェクトへの参照を保持できるようにします。私は恐れることなくVOを返します。また、VOをAggregateRootのパブリックメソッドに渡します。値オブジェクトは不変であるため、Aggregateの整合性境界に違反する外部の状態変化の危険はありません。