1

1)a)Aggregate内のエンティティには、 Aggregateルートを介してのみアクセスする必要があります。ルートが内部エンティティへの一時的な参照を外部オブジェクトに渡すことは可能ですが(単一の操作の期間中)、ほとんどの場合、外部オブジェクトが内部エンティティに対して何らかの操作を実行する必要がある場合は、メソッドを呼び出す必要があります。 )集約ルートで定義されています(考案された例- )?Order.SetOrderLineTitle(...)

2)直接取得できるのはAGGREGATEルートのみです。他のすべてのオブジェクトは、アソシエーションのトラバーサルによって検出される必要があります。

a)外部オブジェクトがアソシエーションのトラバーサルによって非ルートエンティティにアクセスする必要があると言うとき、それらはAggregateルート(たとえば)でメソッドを呼び出す必要があることを意味しますか?それは内部オブジェクトに対して操作を実行しますか、それともAggregateルート内部エンティティへの参照を外部オブジェクトまたはその両方に渡しますか?Order.SetOrderLineTitle(...)

ありがとうございました

4

2 に答える 2

4

1)はい、これはアグリゲートがその整合性を維持するための最良の方法です。これにより、非常に多くのメソッドを持つアグリゲートが生成される可能性があると言う人もいますが、その場合、複数のアグリゲートが機能している可能性があります。

2)理想的には、アグリゲートは参照を渡さずに必要な操作を実行します。参照を渡すことが理にかなっている場合もありますが、これは整合性についての推論をより困難にするため、注意して実装する必要があります。

于 2013-01-23T22:24:16.483 に答える
2

ほとんどの場合、外部オブジェクトが内部エンティティに対して何らかの操作を実行する必要がある場合、集約ルートで定義されたメソッドを呼び出す必要があると思います

これに少し異なる見方を加えると、逆のアプローチも使用される可能性があります。ほとんどの場合、集約ルートにメソッドを追加すると、ルートが肥大化して SRP に違反しないように、ドメインを非常に小さな集約に分割する必要があります。このスライスは、アグリゲートの自然なビジネスの結束を犠牲にするという代償を払うことになるかもしれません。

代わりに、ほとんどの場合、外部オブジェクトが内部エンティティへの一時的な参照を取得し、必要に応じて操作できるようにすることができます。まれなケース、特に複数のエンティティにまたがる不変条件の適用を意味するケースでは、これらの操作をルートに直接実装することをお勧めします。

そのアプローチについては、https: //groups.google.com/forum/# !topic/dddcqrs/mtGanS39XYo で説明しています。

私が見る方法では、集約ルートはエンティティのライフサイクルを担当していますが、集約内の任意のアイテムで呼び出されるすべてのメソッドへの排他的なインターフェイス (特定のエンティティを返す以外) である必要はありません。 .

全体として、最終的な決定は、主にドメイン/機能の結合性を念頭に置いて集計を設計するか、最初にそれらをトランザクション保護として考えたいかによって異なります。

于 2013-01-24T10:01:03.593 に答える