12

a)ほとんどの場合、アグリゲート全体を生成するファクトリのみを使用する必要があるのか​​、それともアグリゲートルートのみを作成するファクトリを使用する必要があるのか​​、少し戸惑います。

b) Aggregate全体を構築するファクトリは、ルートオブジェクトと非ルートオブジェクトの両方を単独で構築する必要がありますか、それとも非ルートエンティティ/ VOの構築を他のファクトリに委任する必要がありますか?

したがって、Aggregateに5種類の非ルートエンティティが含まれている場合、Aggregateファクトリがこれらの非ルートエンティティを単独で作成するか、 Aggregateファクトリが委任する追加の5つのファクトリ(非ルートエンティティごとに1つのファクトリ)がある必要があります。特定のタイプの非ルートエンティティの作成?

ありがとうございました

4

2 に答える 2

8

Eric EvansのDDDブック、138ページでは、太字で書かれています。

集合体全体を1つのピースとして作成し、それらの不変条件を適用します。

次に、次のページで:

FACTORYは、一貫した状態でのみオブジェクトを生成できる必要があります。エンティティの場合、これはAGGREGATE全体の作成を意味します[...]

具体的には、これは、アグリゲート全体を作成するためのファクトリが1つしかないことを意味します。非ルートエンティティまたは値オブジェクトの構築に関与する他のクラス(ファクトリ)が存在する可能性がありますが、アグリゲートの作成を担当するファクトリは1つだけです。このファクトリは、ルートオブジェクトだけでなく、完全な集合体を作成します。

于 2013-02-12T18:23:28.980 に答える
3

サブルートオブジェクト(たとえば、OrderItemfor Ordera)の作成は、ルートエンティティ自体によって処理されるため、外部からは見えない方法でバリアントを適用できます。

したがって、一般的なフローは次のようになります。

var newOrder = orderFactory.CreateOrder(customer);

newOrder.AddOrderItem(product, quantity);

エンティティ内でファクトリが使用される場合がありますが、外部からアクセスすることはできません。

public class Order
{
     private OrderItemFactory _orderItemFactory;

     public AddOrderItem(Product product, int Quantity)
     {
          var newOrderItem = _orderItemFactory.CreateOrderItem(product, quantity);
     }
}`
于 2013-02-14T17:33:32.263 に答える