2009-04-12 63 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(); 
}