我正在看DDD,我有一些想法。在购物网站上,我有典型的订单。
public class Order
{
public ICollection<OrderRow> OrderRows { get; set; }
public ICollection<Payment> Payments { get; set; }
...
}
付款似乎很自然地放在订单上。下订单或处理订单时,付款是订单的一部分。
但后来管理员希望单独处理付款。例如。在管理界面中有需要处理的付款清单。
我该怎么做?是否应从订单中删除付款并将其作为自己的根汇总?
答案 0 :(得分:2)
我的理解是聚合可以并且将重叠,允许您定义对当前操作的业务上下文最有意义的聚合。
因此,在这种情况下,是的,当按照订单的方式工作时,您会将付款作为订单汇总的一部分公开,但这并不妨碍您使用专用的PaymentRepository将Payment作为汇总根公开。< / p>
答案 1 :(得分:0)
我认为Payment实体不属于Order聚合。正如您所写,您具有与Payments分开使用的功能。这意味着仅在订单上下文中不使用付款。这意味着Payments不属于Order aggregate :)。
但是,即使订单聚合不属于订单聚合,也可以在订单类中使用Payments属性。
答案 2 :(得分:0)
如果没有订单就不能存在付款,则付款不是聚合根。
如果它不是聚合根,那么从OrderRepository加载适当的Order对象并对其中的Payment实体进行操作似乎具有最大的DDD完整性。