Design patterns 如果聚合中不允许存储库,如何在聚合中延迟加载实体

Design patterns 如果聚合中不允许存储库,如何在聚合中延迟加载实体,design-patterns,domain-driven-design,lazy-loading,repository-pattern,Design Patterns,Domain Driven Design,Lazy Loading,Repository Pattern,我最近阅读了DDD,发现了一条准则,即不允许在聚合中使用存储库。现在,如果我们遵循这一指导原则,那么这意味着当我们从数据库创建/恢复根目录时,我们必须加载聚合中的所有实体和值对象,但是如果实体/值对象的数量很大,我想延迟加载它们,我如何在不访问存储库的情况下实现这一点,实现这一点的标准方法是什么。聚合的全部要点是将实体分离为独立的块。然后可以一次加载所有这些块。当然,如果您的ORM支持延迟加载,并且您并不总是需要整个聚合,那么您可以使用延迟加载,但这只是一个额外的好处 当您需要加载一些相关的聚合

我最近阅读了DDD,发现了一条准则,即不允许在聚合中使用存储库。现在,如果我们遵循这一指导原则,那么这意味着当我们从数据库创建/恢复根目录时,我们必须加载聚合中的所有实体和值对象,但是如果实体/值对象的数量很大,我想延迟加载它们,我如何在不访问存储库的情况下实现这一点,实现这一点的标准方法是什么。

聚合的全部要点是将实体分离为独立的块。然后可以一次加载所有这些块。当然,如果您的ORM支持延迟加载,并且您并不总是需要整个聚合,那么您可以使用延迟加载,但这只是一个额外的好处

当您需要加载一些相关的聚合时,您应该从一个聚合中获取id,并使用这些id从其他存储库加载

在DDD中,还可以实现在服务中使用多个聚合的代码


如果您确实需要访问聚合中的这些数据,那么聚合边界可能不正确,它还应该包含这些额外的数据(例如,在您的订单中有一个OrderedItem列表)。

假设我有一个由entity1和entity2组成的聚合,其中entity1是根,并包含对entity2的引用,现在我想执行
entity1.getEntity2()
entity1.someEntity2Operation()
在entity2应该延迟存放的地方,如果我不能访问我的存储库及其扩展,我的数据库,我将如何实现这一点。您谈到了获取id而不是实际对象,然后使用ot获取项目,这是做事情的标准方法还是有其他方法来实现这一点