집계 루트를 통해 집계의 엔티티 내용에 액세스하는 간단한 예를 보여줄 수 있습니까? 이러한 개념을 반영하기위한 전체 권한을 어떻게 표현할 지 명확하지 않습니다. 티아.집계 루트를 통해 엔티티에 액세스 : 간단한 예?
답변
일반적으로 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);
}
}
나는 이것이 낡은 질문이라는 것을 알고있다. 그러나 당신의 모델에서 OrderLine을 업데이트하고 싶다면 어떻게 될 것인가? public orderLines list가 있어야 하는가? 그런 다음 주문을 다시 저장소로 전달하여 Order/Customer/OrderItems를 업데이트하십시오. – Craig
@ 위의 질문에 행운을 빌어 요? 나는 정말로 똑같은 일로 정말로 고심하고있다. 집계 루트 내의 중첩 엔티티에 대한 업데이트는 어떻게합니까? – Sudarshan
@Sudarshan 모든 액세스는 집계 루트를 거쳐야합니다. 아니요, 공공 질서 라인 목록이 있어서는 안됩니다. 이를 가능하게하려면 집계 루트에 메서드를 공개해야합니다. –
zsharp - 내가 아래에 준 답을 정리하고 싶은 것이 있습니까? –