1

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

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

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

但后来管理员想单独处理付款。例如,在管理界面中有需要处理的付款列表。

我该怎么做?Payments 是否应该从订单中删除并成为其自己的根聚合?

4

3 回答 3

2

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

因此,在这种情况下,是的,在按照 Order 工作时,您会将 Payments 作为 Order 聚合的一部分公开,但这并不妨碍您还拥有一个将 Payment 作为聚合根公开的专用 PaymentRepository。

于 2011-01-31T22:15:15.477 回答
0

我认为支付实体不属于订单聚合。正如您所写的那样,您具有单独与付款一起使用的功能。这意味着付款不仅仅在订单上下文中使用。这意味着付款不属于订单聚合:)。
然而,Order 类中可能有 Payments 属性,即使它不是 Order 聚合的一部分。

于 2011-01-31T22:02:37.873 回答
0

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

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

于 2012-08-23T20:00:03.603 回答