2012-03-05 40 views
2

假設我不使用ORM,並按照DDD,請考慮以下情況:如何解決與具有DDD中其他實體的實體相關的性能/內存問題?

一個Project擁有一套File秒。

我已經創建了ProjectProjectRepositoryFileFileRepository類。

我最初的想法是將給定Project的所有File實體傳遞給它的構造函數。當然,該項目實例將通過ProjectRepository創建。

的問題是,如果我有一百萬個文件(雖然我不會有一萬個文件,我將有足夠的人,使這個需要一段時間),我必須加載所有這些,甚至當我不需要它們時。

什麼是這個標準的做法?我想不出比將FileRepository傳遞給每個Project實例更好。

+0

它是一個Web應用程序嗎?在什麼情況下你需要訪問這些文件?對於命令和查詢,你需要相同的模型嗎? – MikeSW 2012-03-06 12:51:32

回答

2

沒有標準的方式。這是域驅動的設計,所以如果你問我,它取決於域。 也許你可以添加更多的域到你的設計。 您只有兩個概念:一個項目和一個文件。但是你說你不想加載文件(假設文件將始終加載文件的內容)。

因此,也許你應該考慮一下的FileReference,這是文件的輕量級表示(名稱,路徑,大小?)。 對我來說,聽起來像你的問題是處理一大組文件而不是OOP。

1

你可以實現一個service layer,你的客戶與座標存儲庫進行交互,並返回域實體。這將提供更好的問題分離;我個人認爲你的客戶不應該訪問你的倉庫。

4

由於您提到DDD:如果有兩個存儲庫,則表示存在兩個總合根。 Aggregate Root概念的全部要點是,每個根負責其整個對象圖的

如果您嘗試將文件組合成一個項目的對象圖,然後將這些文件的所有權不明確。換句話說,不這樣做:

project 
- file 
- file 
- file 

要麼把他們兩個(相關)的對象圖,或改造的API,以便有隻有一個聚合根(庫)。

+0

只有一個存儲庫(單身人士)。 – 2012-03-06 16:30:10

+0

在你的問題中,你特別描述了兩個存儲庫(ProjectRepository和FileRepository)... – 2012-03-06 18:02:28

相關問題