Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 查询聚合中除根以外的实体_Design Patterns_Repository_Domain Driven Design - Fatal编程技术网

Design patterns 查询聚合中除根以外的实体

Design patterns 查询聚合中除根以外的实体,design-patterns,repository,domain-driven-design,Design Patterns,Repository,Domain Driven Design,在DDD上下文中,总是说存储库必须只查询聚合根。然后,聚合根允许访问聚合中的其他实体。但是,对聚合中实体的查询是如何建模的 假设订单聚合的情况。Order是根,有一个明细行列表,这些明细行引用一个产品(它是另一个聚合的根),并具有其他属性,如quantity 现在,假设我需要列出引用特定产品的订单行或订单行,以生成由各种服务使用的报告,例如计算订单为产品请求的平均项目数 搜索每个订单,然后列出所有行并选择我感兴趣的行,听起来不切实际。Orders存储库中的getLinesByProduct()听

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

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

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

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

如何对该查询进行建模

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

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


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

更新:我发现了一个密切相关的问题。在这种情况下得出的结论是,这些实体应该是其自身的总和。塔尔强调了我的直觉,在我的情况下,同样的解决方案适用。报告是核心应用程序的一部分还是单独的应用程序?