访问不是聚合根的实体

时间:2011-01-31 13:38:30

标签: domain-driven-design entity aggregateroot

我正在看DDD,我有一些想法。在购物网站上,我有典型的订单。

public class Order
{
    public ICollection<OrderRow> OrderRows { get; set; }
    public ICollection<Payment> Payments { get; set; }
    ...
}

付款似乎很自然地放在订单上。下订单或处理订单时,付款是订单的一部分。

但后来管理员希望单独处理付款。例如。在管理界面中有需要处理的付款清单。

我该怎么做?是否应从订单中删除付款并将其作为自己的根汇总?

3 个答案:

答案 0 :(得分:2)

我的理解是聚合可以并且将重叠,允许您定义对当前操作的业务上下文最有意义的聚合。

因此,在这种情况下,是的,当按照订单的方式工作时,您会将付款作为订单汇总的一部分公开,但这并不妨碍您使用专用的PaymentRepository将Payment作为汇总根公开。< / p>

答案 1 :(得分:0)

我认为Payment实体不属于Order聚合。正如您所写,您具有与Payments分开使用的功能。这意味着仅在订单上下文中不使用付款。这意味着Payments不属于Order aggregate :)。
但是,即使订单聚合不属于订单聚合,也可以在订单类中使用Payments属性。

答案 2 :(得分:0)

如果没有订单就不能存在付款,则付款不是聚合根。

如果它不是聚合根,那么从OrderRepository加载适当的Order对象并对其中的Payment实体进行操作似乎具有最大的DDD完整性。