Domain driven design 访问';它不是聚合根

Domain driven design 访问';它不是聚合根,domain-driven-design,entity,aggregateroot,Domain Driven Design,Entity,Aggregateroot,我在看DDD,我有一些想法。在购物网站上,我有典型的订单 public class Order { public ICollection<OrderRow> OrderRows { get; set; } public ICollection<Payment> Payments { get; set; } ... } 公共类秩序 { 公共ICollection OrderRows{get;set;} 公共ICollection付款{get;set

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

public class Order
{
    public ICollection<OrderRow> OrderRows { get; set; }
    public ICollection<Payment> Payments { get; set; }
    ...
}
公共类秩序
{
公共ICollection OrderRows{get;set;}
公共ICollection付款{get;set;}
...
}
订单上的付款似乎很自然。下订单或处理订单时,付款是订单的一部分

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


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

我认为付款实体不属于订单聚合。正如您所写的,您拥有单独处理付款的功能。这意味着付款不仅仅用于订单上下文。这意味着付款不属于订单合计:)。

但是,订单类中可以有Payments属性,即使它不是订单聚合的一部分

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


因此,在本例中,是的,当按订单工作时,您会将付款公开为订单聚合的一部分,但这并不妨碍您也拥有一个专用的PaymentRepository,它将付款公开为聚合根。

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

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

在大多数域中没有重叠是非常不自然的。