2011-04-11 133 views
1

假設使用諸如NHibernate或Entity Framework的ORM,爲複雜對象設計存儲庫的最佳方法是什麼?複雜對象的存儲庫設計?

我創建使用實體框架4.應用程序的應用程序使用複雜的對象 - 一個Foo對象包含在Foo.Bars財產Bar對象的集合,等等。在過去,我會創建一個FooRepository,然後創建一個BarRepository,並且我會將BarRepository的引用注入到FooRepository構造函數中。

當一個查詢被傳遞給FooRepository時,它會根據需要調用BarRepository來爲每個Foo對象構造Foo.Bars屬性。當一個Foo對象傳遞給FooRepository進行持久化時,存儲庫將調用BarRepository以將對象保留在Foo.Bars屬性中。

我的問題很簡單:這是一個普遍接受的方式來設置存儲庫?有更好的方法嗎?謝謝你的幫助。

回答

2

在域驅動設計中,存在「根聚合」對象的概念。 The accepted answer到相關的問題有很好的信息,它是什麼以及如何在你的設計中使用它。我不知道實體框架,但NHibernate不需要你描述的使用模式。只要所有嵌套對象及其關係都正確映射到表,保存聚合根將同時保存其所有子對象。當嵌套對象具有需要作爲其訪問或持久性的一部分執行的特定業務邏輯時,這是一個例外。在這種情況下,您需要傳遞「子」存儲庫,以免重複該業務邏輯。

0

存儲庫模式有助於在相關實體之間對業務事務進行分組。這意味着如果您有兩個域對象foo和bar,並且具有像GetList(),Update()這樣的常見事務,那麼可以創建像FoobarReporsitory這樣的公共存儲庫。您甚至可以將其抽象到稱爲IFoobarReporsitory的接口,以使應用程序鬆散耦合。