DDD - 聚合根加载/查询性能

JPP*_*JPP 2 domain-driven-design ddd-repositories aggregateroot cqrs

我正在玩DDD并弹出这个问题.我如何加载子聚合根?会出现几个性能问题.想象一下以下示例:

public AggregateRoot1
{
     #region
        properties
     #endregion

     public AggregateRoot2 AR2{get;set;}

     public IEnumerable<AggregateRoot3> AR3List{get;set;}

     (...)
}
Run Code Online (Sandbox Code Playgroud)

如果我在获得AggregateRoot1时加载AggregateRoot2和AggregateRoot3列表,那么图表就会非常庞大​​.这似乎不是一个好方法.

我有两个选择:

  1. 替代AggregateRoot2 AR2通过的Guid AR2IdIEnumerable的AggregateRoot3> AR3List通过IEnumerable的GUID> AR3ListIds.所有AR引用都应该由ID代替.
  2. 因为我不喜欢IEnumerable ARListIds方法,我正在考虑删除0 ...*引用AR.需要AR列表数据的所有操作都应该通过像David Masters这样的域服务来实现

顺便说一句,我不考虑使用延迟加载.

我很期待听到你对AR儿童装载的看法.谢谢

eul*_*rfx 7

理想情况下,聚合之间的引用应仅基于标识.这是选项1.但是,您应该评估每个引用,以确定引用保持聚合的一致性是否需要它.有时,两个聚合之间的关系本身可以成为一个单独加载的聚合.总的来说,看看Vaughn Vernon的有效聚合设计,深入分析设计聚合时的各种权衡.这也是David Masters在链接问题中指出的内容.