首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CQRS & PurchaseOrder AggregateRoot

CQRS & PurchaseOrder AggregateRoot
EN

Stack Overflow用户
提问于 2016-07-15 10:58:53
回答 1查看 174关注 0票数 0

我是CQRS和DDD的新手,我正在使用MS WideWorldImporters数据库,目前我被困在定购订单放置命令上,说出我不知道它应该是什么样子的真相,你能指导我吗?如果我有一个PlaceOrderCommand,而处理程序应该使用它来创建PurchaseOrder、填充它的OrderLines并进行保存。如果是,命令应该是什么样子的域模型时:

样本域模型:

代码语言:javascript
复制
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));
    }
}

示例命令处理程序:

代码语言:javascript
复制
    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
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-15 13:17:51

你就不能这样做吗?

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38394462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档