4

我通常會嘗試並將所有相關實體保存在同一個存儲庫中。以下是實體有兩個之間的關係(標有壓痕):何時將某些實體分隔到不同的存儲庫?

  • 用戶
    • UserPreference

所以他們有意義進入用戶系統信息庫。但是,用戶通常會鏈接到許多不同的實體,您會在下面的示例中執行什麼操作?

  • 用戶

    • UserPrefence
    • 訂購
  • 訂購

    • 產品

訂單與產品和用戶都有關係,但不會將所有4個實體的功能都放在同一個存儲庫中。當您處理用戶實體並收集訂單信息時,您會做什麼?您可能需要有關產品的額外信息,並且通常ORM將提供延遲加載的能力。但是,如果您的產品實體位於用戶實體的單獨存儲庫中,那麼肯定會造成存儲庫之間的衝突?

回答

5

在埃裏克埃文斯領域驅動設計(http://domaindrivendesign.org/index.htm)意義的事情,你應該先想想你的骨料什麼。然後,您可以在這些環境中構建存儲庫。

有處理,涉及到相互聚集的許多技術。我最常使用的方法是隻允許聚合通過只讀接口相互關聯。 Aggregates背後的一個關鍵思想是,如果不通過根目錄,就不能更改底層對象的狀態。因此,如果產品和用戶是您的模型中的根集合,那麼如果我通過用戶 - >訂單 - >產品找到它,則無法更新產品。我必須從產品存儲庫獲取產品才能對其進行編輯。 (從一個UI點,你可以使它看起來像你去用戶 - >命令中─>產品,但是當你到了產品編輯畫面,你搶從產品信息庫的實體)。

當您從User-> Order-> Product查看產品(在代碼中)時,您應該查看無法更改產品基礎狀態的產品界面(僅獲取沒有套等)

按照您的使用方式組織您的聚合體及其存儲庫。我可以看到User和Prodcut是他們自己的聚合並擁有自己的存儲庫。從您的描述中我不確定訂單是屬於用戶還是獨立。

無論哪種方式使用只讀接口聚合相關。當你必須從一個集合到另一個集合時,從它自己的存儲庫中獲取它。

如果您的存儲庫正在緩存,那麼當您加載訂單(通過用戶)時,只會從數據庫加載產品ID。然後使用Product Id從Product Repository中加載詳細信息。在加載訂單時,您可以通過在產品上加載任何其他不變量來優化一點。

0

如果SQL Server是你的數據庫,並通過你的意思是一個數據庫存儲庫,那麼我只想堅持在任何數據庫有意義的信息,並在相關數據庫的一個觀點,即通過三個點的符號選擇了其他數據庫。

+0

感謝您的回覆羅伯特,所有的表格都將存儲在同一個數據庫中,但我不認爲擁有一個用於從數據庫中收集實體的海量存儲庫類是易於維護和易於遵循的,因爲它可以分離出。 – 2008-12-15 23:40:38

1

通過倉庫你的意思是類?

根據不同的使用對象(庫)中,你可以做,它結合了數據庫中的數據的視圖,並與你的ORM來表示視圖中創建一個類(庫)。當您想要顯示每個表格僅有幾列的較輕重量物體時,此設計就可以工作。

0

我仍然對你的意思是「存儲庫」感到困惑。我會把你談到的所有關於單獨的類的東西(因此分開的文件)都做出來,並且它們都會駐留在同一個項目中。

相關問題