如何避免 DDD 聚合关系的 N+1 问题?

How to avoid N+1 problem with DDD aggregate relations?

我读过 Vaughn Vernon 的一篇文章,他在文中指出聚合应该只通过身份相互引用。

假设我有聚合 A,它引用了聚合 B 的标识。我想在我的 UI.[=10 中显示一个包含聚合 A 和聚合 B 中某些列的列表=]

这意味着我必须先查询聚合 A,然后我必须使用聚合 A 的引用查询聚合 B。

这似乎是一个 N+1 问题,我如何在尊重“按身份引用”规则的情况下解决这个问题?

您不应查询域对象,因为它们通常不适合查询。该域更关心创建和写入数据的命令/事务方面。

另一方面,查询 / 报告 更关心读取数据。为此,您可以开发一种尽可能接近您正在使用的数据层的轻量级查询机制。因此,您 return 而不是原始数据或 阅读模型 (DTO) 以及您需要的任何连接和数据聚合。