2009-04-12 60 views
12

我是新來的版本庫模式,在網上做了大量的閱讀之後,我對所發生的事情有了一個粗略的理解,但是似乎存在想法衝突。存儲庫模式 - POCO或IQueryable?

一個是IRepository應該返回的內容。

我想談談在ONLY波蘇斯所以我會爲每一個聚合根的IRepository執行,就像這樣:

public class OrangeRepository: IOrangeRepository 
{ 
    public Orange GetOrange(IOrangeCriteria criteria); 
} 

其中IOrangeCriteria採取了一些具體的尋找一個橙色的論點。

我擁有的另一件事是一些數據後端 - 這就是爲什麼我首先進入這種模式。我想我會爲每一個實現,如

OrangeRepositoryOracle,OrangeRepositorySQL,OrangeRepositoryMock等

我想保持開放,這樣我可以使用EF或NHibernate的 - 再次,如果我在波蘇斯IOrangeRepository交易,然後我會通過執行一個OrangeRepositoryNHibernate將其封裝在存儲庫本身內。

我是否在正確的行?

感謝

編輯:感謝您的反饋,我沒有其他人在此刻所以可以理解的反彈這些想法了!

回答

9

是的,你的版本是最安全/最兼容的版本。您仍然可以將它用於任何資源,不僅是數據訪問資源,還包括Web服務,文件等等。

請注意,使用IQueryable版本,您仍然可以根據您的POCO類工作,但是您綁定了IQueryable。還要考慮到你可能有使用IQueryable的代碼,然後證明你遇到了一個存儲庫的ORM處理不好的情況。

5

我使用和你一樣的模式。我很喜歡。您可以從任何資源中獲取數據。

但是,使用IQuerable的好處是,您不必編寫像OrangeCriteria一樣的自己的標準API。

當NHibernate獲得完整的Linq支持,然後我可以切換到IQueryable。

然後你得到

public class OrangeRepository: IOrangeRepository { 
    public IQueryable<Orange> GetOranges(); 
}