2013-03-18 39 views
0

我执行实体UserImages与像addImage$图像标识),removeImage$图像标识),getImages方法($ from,$ count)。实现无负载数据的大集合实体到内存

Phisycally,数据(图像ID的集合)保存在应用程序级别的存储,这提供了良好的功能,例如的addItem$的keyName,$项目,$重量),的removeItem$ keyName,$ item),getItems$ key,$ from,$ count)。

如何使模型使用DDD风格的外部存储(查看域)存储,而无需引用UserImages实体中的存储?重要的是,我不想像传统方法那样将所有的存储集合加载到实体中。

希望我对这个问题提供了一个很好的解释,请不要让我知道。非常感谢您的帮助。

回答

5

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

+0

eulerfx,非常感谢您的提示。这确实有道理。现在我完全修改了我的建筑的灵感。 – velvetcat 2013-03-20 10:53:03

0

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

脱钩域逻辑和持续性的担忧,您可以使用observable entities:提供实体存储库,不断观察它,这样,当适当域事件发生时,它会持续变化。但是,如果您使用PHP进行编码,则必须手动编码Observer模式。