2016-07-15 7 views
0

나는 CQRS & DDD를 처음 사용하고 연습을 위해 내가 구입 주문 배치 명령에 머물러있는 순간에 MS WideWorldImporters 데이터베이스를 사용하고있어 어떻게 보이는지 모르겠다. 네가 나를 인도 할 수 있니? 1 PlaceOrderCommand가 있어야하며 처리기는 PurchaseOrder를 작성하여 OrderLines를 채우고 저장하는 데 사용해야합니다.CQRS & PurchaseOrder AggregateRoot

샘플 도메인 모델 : 네, 어떻게 명령 도메인 모델과 같은 경우처럼 보일 것

public class PurchaseOrder : AggregateRoot<int> 
{ 
    private PurchaseOrder(int id, int supplierID, DateTime orderDate, int deliveryMethodID, int contactPersonID) : base(id) 
    { 
     SupplierID = supplierID; 
     OrderDate = orderDate; 
     DeliveryMethodID = deliveryMethodID; 
     ContactPersonID = contactPersonID; 
    } 

    public List<PurchaseOrderLine> PurchaseOrderLines { get; private set; } 
    public int SupplierID { get; private set; } 
    public DateTime OrderDate { get; private set; } 
    public int DeliveryMethodID { get; private set; } 
    public int ContactPersonID { get; private set; } 

    public static PurchaseOrder CreatePurchaseOrder(int supplierID, int deliveryMethodID, int contactPersonID) 
    { 
     return new PurchaseOrder(1, supplierID, DateTime.Now, deliveryMethodID, contactPersonID); 
    } 

    public void AddPurchaseOrderLine(int stockItemID) 
    { 
     PurchaseOrderLines.Add(new PurchaseOrderLine(this.Id, stockItemID)); 
    } 
} 

샘플 명령 처리기 :

public class PurchaseOrdersCommandHandler : 
    ICommandHandler<PlacePurchaseOrder> 
{ 
    private readonly IPurchaseOrderRepository purchaseOrderRepository; 

    public PurchaseOrdersCommandHandler(IPurchaseOrderRepository purchaseOrderRepository) 
    { 
     this.purchaseOrderRepository = purchaseOrderRepository; 
    } 

    public void Handle(PlacePurchaseOrder command) 
    { 
     // TODO: based on command Create Purchase order with its line items and save it to db as a whole 
    } 

} 

답변

1

당신이 단지 같은 것을 할 수 있습니까?

public void Handle(PlacePurchaseOrder command) 
{ 
    var purchaseOrder = PurchaseOrder.CreatePurchaseOrder(command.id, command.upplierID, command.orderDate, command.deliveryMethodID, command.contactPersonID); 
    foreach(int stockItemID in command.OrderLines) 
    { 
     purchaseOrder.AddPurchaseOrderLine(stockItemID) 
    } 
    this.purchaseOrderRepository.Save(purchaseOrder); 
} 
+0

명령 인수는 개체 참조 일 수 있습니까? – QuietNaN

+0

int의 목록 일 뿐이라면 왜 안 볼지 모르겠다. – tomliversidge

+0

나는 일반적인 지침으로 커다란 중첩 된 객체 그래프를 사용하지 않을 것이지만 구매 주문 라인 아이템을 나타내는 int리스트가 비즈니스 프로세스와 일치한다면 나는 괜찮다고 생각한다. – tomliversidge