4

在 DDD 的上下文中,总是说存储库只能查询聚合根。聚合根然后授予对聚合中其他实体的访问权限。但是,对聚合中的实体的查询是如何建模的?

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

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

搜索每个 Oder,然后列出所有行并选择我感兴趣的行,听起来不切实际。Orders 存储库中的 getLinesByProduct() 听起来更方便,但会将 Lines 暴露在 Aggregate 之外。

如何建模此查询?

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

4

1 回答 1

2

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

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

于 2012-08-02T05:28:32.200 回答