2009-04-03 21 views
5

Puoi mostrare un semplice esempio di accesso ai contenuti di un'entità in un aggregato tramite una radice aggregata? Non sono chiaro su come si rappresenterebbero le autorizzazioni Aggregate per riflettere questi concetti. tia.Accesso alle entità tramite radice aggregata: semplice esempio?

+2

zsharp - c'è qualcosa che vuoi chiarire nella risposta che ho dato qui sotto? –

risposta

7

In genere si incapsulerebbe questo in comandi che l'Aggregato espone sul proprio contratto.

Ad esempio, con un ordine aggregato, è possibile aggiungere OrderLines utilizzando i dati ottenuti dalla 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

So che questa è una vecchia domanda ma ... Nel tuo modello, se volessi aggiornare una OrderLine, come sarebbe .... dovresti avere un elenco di ordini pubblici? E quindi passare l'ordine di nuovo a un repository per aggiornare l'ordine/cliente/OrderItems? – Craig

+0

@Crea un po 'di fortuna con la domanda precedente? Sto davvero lottando con esattamente la stessa cosa. Come si effettuano aggiornamenti su entità nidificate all'interno di una radice aggregata? – Sudarshan

+0

@Sudarshan Tutti gli accessi devono passare attraverso la radice aggregata - quindi no, non ci dovrebbe essere un elenco di linee di ordine pubblico. Avresti bisogno di esporre un metodo sulla radice aggregata per consentire questo. –

Problemi correlati