2009-04-03 4 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을 업데이트하고 싶다면 어떻게 될 것인가? public orderLines list가 있어야 하는가? 그런 다음 주문을 다시 저장소로 전달하여 Order/Customer/OrderItems를 업데이트하십시오. – Craig

+0

@ 위의 질문에 행운을 빌어 요? 나는 정말로 똑같은 일로 정말로 고심하고있다. 집계 루트 내의 중첩 엔티티에 대한 업데이트는 어떻게합니까? – Sudarshan

+0

@Sudarshan 모든 액세스는 집계 루트를 거쳐야합니다. 아니요, 공공 질서 라인 목록이 있어서는 안됩니다. 이를 가능하게하려면 집계 루트에 메서드를 공개해야합니다. –

관련 문제