2016-07-15 6 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

関連する問題