查询聚合中除根之外的实体

pab*_*cin 7 design-patterns domain-driven-design repository

在 DDD 的上下文中,总是说存储库必须只查询聚合根。然后,聚合根可以访问聚合中的其他实体。然而,如何对聚合中的实体进行建模?

假设订单聚合的情况。订单是根,有一个详细行列表,它引用产品(这是另一个聚合的根)并具有其他属性,例如数量

现在,假设我需要列出或订购引用特定产品的行,以生成供不同服务使用的报告,例如计算产品订单所请求的平均商品数量。

搜索每一条订单,然后列出所有线路并选择我感兴趣的线路,听起来不切实际。订单存储库中的 getLinesByProduct() 听起来更方便,但会暴露聚合之外的行。

我如何为这个查询建模?

也许问题是我正在查询我的命令模型,并且我应该有一个(非规范化)查询模型,其中详细信息行是具有所有所需信息的实体?

eul*_*rfx 3

也许问题是我正在查询我的命令模型,并且我应该有一个(非规范化)查询模型,其中详细信息行是具有所有所需信息的实体?

这是完全正确的。DDD 并不是为了解决查询问题,并且由于其各种约束和 ORM 施加的约束,经常会产生摩擦。查询,尤其是报告应单独处理。您可以使用读取模型模式来支持核心应用程序一部分的查询,或者使用基于复制数据运行的完全独立的报告系统。