Domain driven design 在不将数据加载到内存的情况下实现大型集合实体

Domain driven design 在不将数据加载到内存的情况下实现大型集合实体,domain-driven-design,Domain Driven Design,我正在实现一个实体UserImages,方法包括addImage($imageId),removeImage($imageId),getImages($from,$count) 实际上,存储在应用程序级存储器中的数据(图像ID的集合),它提供了很好的功能,如添加项($keyName,$item,$weight),删除项($keyName,$item),获取项($key,$from,$count) 如何使model以DDD样式使用此外部(从域中查看)存储,而不引用来自UserImages实体的存储

我正在实现一个实体UserImages,方法包括addImage($imageId),removeImage($imageId),getImages($from,$count)

实际上,存储在应用程序级存储器中的数据(图像ID的集合),它提供了很好的功能,如添加项($keyName,$item,$weight),删除项($keyName,$item),获取项($key,$from,$count)

如何使model以DDD样式使用此外部(从域中查看)存储,而不引用来自UserImages实体的存储?重要的是,我不想像传统方法那样,将所有集合从存储器加载到实体


希望我提供了一个很好的解释问题,请让我知道如果没有。非常感谢你的帮助

首先,延迟加载是DDD中的一种反模式,当且仅当实体提供对更多数据的访问而不是保持其不变量所需时,才需要它。为了解决这个问题,您可以使用


要将域逻辑和持久性问题解耦,您可以使用:提供实体的存储库不断观察实体,以便在发生适当的域事件时,能够持久化更改。但是,如果您使用PHP进行编码,则必须手动对观察者模式进行编码。

首先,延迟加载是DDD中的一种反模式,当且仅当实体提供了对更多数据的访问,而这些数据超出了保持其不变量所需时,您才需要它。为了解决这个问题,您可以使用


要将域逻辑和持久性问题解耦,您可以使用:提供实体的存储库不断观察实体,以便在发生适当的域事件时,能够持久化更改。但是,如果您使用PHP进行编码,则必须手动对观察者模式进行编码。

用户图像
听起来不像是一个实体,更像是一个服务存储库,您已经有了应用程序级存储的实现。您可能希望将其公开为一个
UserImageRepository
,一个存储库是一个更适合您拥有的名称。更一般地说,每当有一个关联的一端可能具有非常大的基数时,考虑替代直接对象引用。实体和聚合应该是一致性边界,而不一定是它们所代表的概念的完整化身。另外,请查看以深入了解此主题。

用户图像
听起来不像是一个实体,更像是一个服务存储库,您已经有了应用程序级存储的实现。您可能希望将其公开为一个
UserImageRepository
,一个存储库是一个更适合您拥有的名称。更一般地说,每当有一个关联的一端可能具有非常大的基数时,考虑替代直接对象引用。实体和聚合应该是一致性边界,而不一定是它们所代表的概念的完整化身。另外,请查看以深入了解此主题。

eulerfx,非常感谢您的提示。这确实有道理。现在我正在完全修改我的架构。欧勒夫,非常感谢你的提示。这确实有道理。现在我正在完全修改我的架构。