获取重聚合列表

时间:2013-05-16 12:38:12

标签: rest repository domain-driven-design repository-pattern ddd-repositories

假设我们的域中有这样一个聚合,它存储在三层深度的表层次结构中。我们将域对象表示为Order - OrderItems - ItemAttributes。 我们还假设我们在数据层使用Repository模式。

存储库包含方法GetAll,它返回Orders

的列表

我们在服务层上遵循REST,因此,我们使用

  • GET /orders获取商家信息
  • GET /orders/{Id}获取具体的Order

该列表仅包含每个Order的基本字段,但没有详细信息,但是,按id查询会返回更大的对象。

由于一个Order的实现是一项昂贵的操作,我们不喜欢这样一个事实:我们只是为了向客户端发送一些字段而得到完整的聚合。另一方面,我们尝试遵循合理的规则,即存储库必须仅返回完全初始化的聚合。

我们怎样才能解决这个难题?

1 个答案:

答案 0 :(得分:2)

除了其他人建议的CQRS之外,一个简单的Lazy loading是否可以很好地解决这个问题?如果未访问订单商品,则不会加载订单商品。如果你不能使用延迟加载,还是专用的OrderSummary / OrderStatus域对象?

同样值得重新考虑是否确实需要重型骨料。可能根本没有域规则要求它。例如,生命周期是具有重聚合的众所周知的“错误理由”(例如Group-> User,或Product-> BacklogItem)。强烈推荐阅读此主题:Aggregate design