在埃裏克埃文斯領域驅動設計(http://domaindrivendesign.org/index.htm)意義的事情,你應該先想想你的骨料什麼。然後,您可以在這些環境中構建存儲庫。
有處理,涉及到相互聚集的許多技術。我最常使用的方法是隻允許聚合通過只讀接口相互關聯。 Aggregates背後的一個關鍵思想是,如果不通過根目錄,就不能更改底層對象的狀態。因此,如果產品和用戶是您的模型中的根集合,那麼如果我通過用戶 - >訂單 - >產品找到它,則無法更新產品。我必須從產品存儲庫獲取產品才能對其進行編輯。 (從一個UI點,你可以使它看起來像你去用戶 - >命令中─>產品,但是當你到了產品編輯畫面,你搶從產品信息庫的實體)。
當您從User-> Order-> Product查看產品(在代碼中)時,您應該查看無法更改產品基礎狀態的產品界面(僅獲取沒有套等)
按照您的使用方式組織您的聚合體及其存儲庫。我可以看到User和Prodcut是他們自己的聚合並擁有自己的存儲庫。從您的描述中我不確定訂單是屬於用戶還是獨立。
無論哪種方式使用只讀接口聚合相關。當你必須從一個集合到另一個集合時,從它自己的存儲庫中獲取它。
如果您的存儲庫正在緩存,那麼當您加載訂單(通過用戶)時,只會從數據庫加載產品ID。然後使用Product Id從Product Repository中加載詳細信息。在加載訂單時,您可以通過在產品上加載任何其他不變量來優化一點。
感謝您的回覆羅伯特,所有的表格都將存儲在同一個數據庫中,但我不認爲擁有一個用於從數據庫中收集實體的海量存儲庫類是易於維護和易於遵循的,因爲它可以分離出。 – 2008-12-15 23:40:38