2010-08-02 4 views
0

저는 Address, Product, Order, OrderLine과 같은 비즈니스 클래스를 가지고 있습니다. 이 경우, Order 클래스에 관한 질문과 저장소에서 어떻게 업데이트해야하는지에 대한 질문이 있습니다.리포지토리 및 비즈니스 개체를 사용하는 것이 좋습니다.

Order 클래스는 둘 이상의 OrderLine을 가질 수 있습니다. 이 클래스는 같이 보입니다 다음

class Order { 
    private List<OrderLine> orderLines; 

    public Address CustomerAddress { get; set; } 
    public Address DeliveryAddress { get; set; } 

    public void Add(OrderLine line) { 
    // stuff to add order line. 
    } 

    public void Remove(int index) { 
    // stuff to remove order line by index. 
    } 
} 

나는 다음을 수행 할 수있는 주문 인출해야하는 경우 :

Order myOrder = Orders.Get(5); // Gets the order with ID 5 from repository. 

을 지금을, 내가 추가하거나 필요에 따라 순서 라인을 제거하고 CustomerAddress를 수정 또는 DeliveryAddress.

내가 수정 내가 할 수있는 순서로 업데이트 할 때 : 지금은 이전에 사용 도착 순서를 가정

public bool Update() { 
    return Orders.Update(this); // Let repository handle updating of this order. 
} 

: 내부적으로 주문의 Update 메소드를 호출

bool updated = order.Update(); 

을 같은 리포지토리 Orders.Get (5)에는 10 개의 주문 라인이 있으며 1 개의 주문 라인을 수정하고 1 개의 주문 라인을 추가하고 1 개의 주문 라인을 삭제했습니다. 주문 저장소의 업데이트 방법에

myOrder.DeliveryAddress = Addresses.Get(64); // Get address with ID 64 from repository and assign it to order. 

어떤 일이 발생한다 :

내가 다른 배달 주소를 할당한다고 가정?

모든 주문 라인을 업데이트하고, 제거 된 주문 라인을 삭제하고, 추가 된 주문 라인을 저장하고 변경된 주문 라인을 업데이트해야합니까?

이러한 내부 항목 (Address 및 OrderLines)을 모두 업데이트, 삽입 또는 제거해야 할 때 매우 복잡해지기 때문에 조금 잃어 버렸습니다.

아무나 제안이 있으십니까?

사전 : 당신이 생각의 도메인 기반 디자인 학교를 따르는 경우 각 집계는 것 관련 클래스의 숫자로 구성되어 어디

답변

0

, 당신은, 집계로 모델을 참여하는 것에 대단히 감사합니다, 주문, OrderLine에 , 등등. 각각의 집합 내에서 하나의 클래스는 집합 루트 (aggregate root)로 지정된다. 주문서를 작성하고 집계 된 모든 물체의 모델 무결성을 관리해야합니다. DDD 저장소에서 단일 개체가 아닌 개체 집계에 대해 작동합니다. 모델을 집계에 정확히 참여시키는 것은 어려울 수 있지만 일단 완료하면 책임이 명확 해집니다.

관련 문제