2013-03-18 59 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模式。