Domain driven design 对DDDS中的非根聚合进行操作(即搜索)

Domain driven design 对DDDS中的非根聚合进行操作(即搜索),domain-driven-design,aggregation,Domain Driven Design,Aggregation,关于在领域驱动设计中使用聚合而非AR的问题 例如,使用熟悉的:Order aggregate root[AR]和OrderLine aggregate member[AM]即可。如果假设订单是持久化的,那么从DDD的角度来看,如何正确地对聚合成员进行操作 例如,我可以为给定项目的所有订单行搜索“查找”操作吗?正确的方法是什么?如果我将它们作为值对象返回,这似乎是错误的,实际上它们是持久化域对象。此外,我可能需要能够从其中一个获得订单。然而,如果我将它们作为实体对象从存储库层返回,那么我似乎违反了

关于在领域驱动设计中使用聚合而非AR的问题

例如,使用熟悉的:Order aggregate root[AR]和OrderLine aggregate member[AM]即可。如果假设订单是持久化的,那么从DDD的角度来看,如何正确地对聚合成员进行操作


例如,我可以为给定项目的所有订单行搜索“查找”操作吗?正确的方法是什么?如果我将它们作为值对象返回,这似乎是错误的,实际上它们是持久化域对象。此外,我可能需要能够从其中一个获得订单。然而,如果我将它们作为实体对象从存储库层返回,那么我似乎违反了聚合根规范规则

我想我的问题已经有了答案。如果我现在的理解正确,那么了解聚合根下面的实体是完全可以的。但是,不能存储/查看/引用它的ID。但是您可以引用AR Id

因此,我可以使用say:OrderRepository.findOrderLineswithProductId方法返回一个OrderLine对象列表减去它们的Id,但在这些对象上使用Order Id AR Id是可以的


如果这不符合DDD规则,请发表评论。

如果您遵守DDD规则。最好在您的存储库中有一个像FindOrdersContainingProductId这样的方法,它将返回订单集合,而不是订单行。您将无法从存储库中检索订单行,您要做的是返回完整的订单。