我有几个业务类,如Address,Product,Order,OrderLine。在这种情况下,我有一个关于我的Order类的问题以及它应该如何在存储库中更新。
Order类可以有多个OrderLine。该类看起来如下所示:
class Order {
private List<OrderLine> orderLines;
public Address CustomerAddress { get; set; }
public Address DeliveryAddress { get; set; }
public void Add(OrderLine line) {
// stuff to add order line.
}
public void Remove(int index) {
// stuff to remove order line by index.
}
}
当我需要获取订单时,我可以执行以下操作:
Order myOrder = Orders.Get(5); // Gets the order with ID 5 from repository.
现在,我可以根据需要添加或删除订单行,并修改CustomerAddress或DeliveryAddress。
当我想更新修改后的订单时,我可以这样做:
bool updated = order.Update();
在内部调用Orders存储库的Update方法,如:
public bool Update() {
return Orders.Update(this); // Let repository handle updating of this order.
}
现在假设我之前使用Orders.Get(5)获得的订单有10个订单行,我修改了1个订单行,添加了1个订单行并删除了1个订单行。
假设我分配了不同的收货地址:
myOrder.DeliveryAddress = Addresses.Get(64); // Get address with ID 64 from repository and assign it to order.
Order Repository的Update方法会发生什么?
是否应更新整个订单(包括所有订单行),删除已删除的订单行,保存已添加的订单行并更新已更改的订单行?
我在这里有点迷失,因为当所有这些内部项目(地址和OrderLines)都必须更新,插入或删除时,它会变得非常复杂。
有人有建议吗?
非常感谢您提前:))
答案 0 :(得分:0)
如果您遵循Domain Driven Design学校,您可以将您的模型参与聚合,其中每个聚合将包含许多相关类,Order,OrderLine等。在每个聚合中,一个类被指定为聚合根,例如,订单,并负责管理聚合中所有对象的模型完整性。 在DDD存储库中对对象的聚合进行操作,而不是对单个对象进行操作。确切地说如何将模型参与聚合可能很困难,但一旦完成,责任就会变得清晰。