2009-04-03 11 views

Odpowiedz

7

Zazwyczaj zawiera się to w poleceniach, które Aggregate udostępnia na swojej umowie.

Na przykład w przypadku agregacji zamówień można dodać linie zamówienia za pomocą danych uzyskanych z interfejsu 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

Wiem, że to stare pytanie, ale ... W twoim modelu, jeśli chciałbym zaktualizować OrderLine, co by to wyglądało .... czy powinna istnieć publiczna lista zleceń? A następnie przekazać zamówienie z powrotem do repozytorium, aby zaktualizować Zamówienie/Klient/OrderItems? – Craig

+0

@Czy powodzenia na powyższe pytanie? Naprawdę walczę z dokładnie tym samym. W jaki sposób dokonać aktualizacji zagnieżdżonych encji w zagregowanym katalogu głównym? – Sudarshan

+0

@Sudarshan Cały dostęp powinien przejść przez sumaryczny katalog główny - tak nie, nie powinno być listy wierszy porządku publicznego. Aby to umożliwić, musisz ujawnić metodę w głównym katalogu głównym. –

Powiązane problemy