Есть два ограниченных контекста.Одним из них является контекст заказа, а другим - контекст получения.
В контексте заказа у заказа есть несколько позиций заказа.В заказе должна быть хотя бы одна позиция заказа.В контексте квитанции квитанция имеет некоторые позиции заказа, а не заказ.
По этой причине я думаю, что позиция заказа должна рассматриваться как совокупная.
Существует несколько кодов, подобных приведенным ниже
public class Order
{
List<OrderItem> orderItems = new List<OrderItem>();
public OrderId Id { get; }
public void AddItem(Item item, Quantity quantity)
{
orderItems.Add(new OrderItem(item, quantity));
}
}
public class OrderItem
{
public ItemId ItemId { get; }
public Quantity Quantity { get; }
}
public class Receipt
{
List<ReceiptItem> receiptItems = new List<ReceiptItem>();
public ReceiptId Id { get; }
public void AddItem(OrderItem orderItem)
{
receiptItems.Add(new ReceiptItem(orderItem));
}
}
public class ReceiptItem
{
public ReceiptItem(OrderItem orderItem)
{
ItemId = orderItem.ItemId;
Quantity = orderItem.Quantity;
}
public ItemId ItemId { get; }
public Quantity Quantity { get; }
//some other properties
}
public class OrderService
{
public void CreateOrder(int[] itemIds, decimal[] quantities)
{
Order order = new Order();
for (int i = 0; i < itemIds.Length; i++)
{
Item item = itemRepository.FindById(itemIds[i]);
order.AddItem(item, quantities[i]);
}
orderRepository.Add(order);
}
}
public class RecieptService
{
public void CreateReceipt(int[] orderItemIds)
{
Receipt receipt = new Receipt();
foreach (var orderItemId in orderItemIds)
{
//To find orderItem I implemented orderItemRepository.
OrderItem orderItem = orderItemRepository.FindById(orderItemId);
receipt.AddItem(orderItem);
//Or should I implement order repository like this
//Order order = orderRepository.FindWhichHasOrderItem(orderItemId);
//valueobject orderItem = orderItemDtoorder.FindOrderItem(orderItemId);
//receipt.AddItem(orderItem);
}
receiptRepository.Add(receipt);
}
}
OrderItem должен быть с заказом как дочерний объект при его создании, поэтому orderItem должен быть доступен только по заказу.Но на OrderItem нужно ссылаться при создании квитанции.Я боролся с этой проблемой в течение нескольких дней, но все же я не решил ее DDD.Пожалуйста, дайте мне знать, как разработать это требование в DDD.