0

我正在使用addImage ( $imageId )、removeImage ( $imageId )、getImages ( $from, $count )等方法实现实体UserImages

在物理上,数据(图像 id 的集合)存储在应用程序级存储中,它提供了很好的功能,如addItem ( $keyName, $item, $weight )、removeItem ( $keyName, $item )、getItems ( $key, $来自, $count )。

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

希望我对问题提供了很好的解释,如果没有,请告诉我。非常感谢您的帮助。

4

2 回答 2

5

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

于 2013-03-18T15:57:05.367 回答
0

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

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

于 2013-03-18T08:37:11.300 回答