2009-04-03 47 views
5

集約ルートを介して集約内のエンティティのコンテンツにアクセスする簡単な例を表示できますか?これらの概念を反映する集約パーミッションをどのように表現するかについては明確ではありません。ティア。集約ルート経由のエンティティへのアクセス:簡単な例?

+2

zsharp - 私が以下に与えた答えで解決したいものはありますか? –

答えて

7

通常、これは、Aggregateがその契約で公開するコマンドでカプセル化します。

たとえば、オーダー集計では、GUIから取得したデータを使用してオーダーラインを追加することができます。

// This is the Order Aggregate Root 
public class Order 
{ 
    private readonly int id; 
    private readonly Customer customer; // Customer is another Aggregate 
    private readonly IList<OrderLine> orderLines; 
    private readonly IOrderLineFactory orderLineFactory; 

    public Order(int id, Customer customer, IOrderLineFactory orderLineFactory) 
    { 
     this.id = id; 
     this.customer = customer; 
     this.orderLines = new List<OrderLine>(); 
     this.orderLineFactory = orderLineFactory; 
    } 

    public void AddOrderLine(Item item, int quantity) 
    { 
     OrderLine orderLine = orderLineFactory.Create(this, item, quantity); 
     orderLines.Add(orderLine); 
    } 
} 
+4

私はこれが古い質問だと知っていますが...あなたのモデルでは、OrderLineを更新したいのであれば、そのように見えます。 Order/Customer/OrderItemsを更新するために注文をリポジトリーに戻しますか? – Craig

+0

@Craig上記の質問に何か不運?私はまったく同じことで本当に苦労しています。集約ルート内のネストされたエンティティの更新はどのようにして行われますか? – Sudarshan

+0

@Sudarshanすべてのアクセスは集約ルートを経由する必要があります。いいえ、公序良俗リストの行はありません。これを可能にするには、集計ルートにメソッドを公開する必要があります。 –

関連する問題