Я новичок в CQRS & DDD, и для практики я использую базу данных MS WideWorldImporters, на данный момент я застрял в команде размещения заказа на поставку, чтобы сказать правду, я не знаю, как это должно выглядеть как, вы можете мне вести? Должен ли я иметь 1 PlaceOrderCommand, и обработчик должен использовать его для создания PurchaseOrder для заполнения своих OrderLines и сохранения. если да, то как команда должна выглядеть, когда модель предметной области выглядит следующим образом:CQRS & PurchaseOrder AggregateRoot
Sample домен Модель:
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));
}
}
Sample Command Handler:
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
}
}
аргументы команды могут быть ссылками на объекты? – QuietNaN
Если это всего лишь список ints, я не понимаю, почему нет. – tomliversidge
Я бы попытался избежать больших графиков вложенных объектов в командах в качестве общего руководства, но если список индексов для представления позиций заказа на поставку соответствует бизнес-процессу, то я думаю, что это нормально :) – tomliversidge