Dun*_*can 12 repository-pattern
我是Repository Pattern的新手,在网上做了很多阅读之后,我对正在发生的事情有了大致的了解,但似乎存在想法冲突.
一个是IRepository应该返回的内容.
我想处理ONLY Pocos所以我会为每个聚合根提供一个IRepository实现,如下所示:
public class OrangeRepository: IOrangeRepository
{
public Orange GetOrange(IOrangeCriteria criteria);
}
Run Code Online (Sandbox Code Playgroud)
其中IOrangeCriteria采用了许多特定于查找Orange的参数.
我的另一件事是一些数据后端 - 这就是我首先进入这种模式的原因.我想我会为每个实现一个实现,例如
OrangeRepositoryOracle,OrangeRepositorySQL,OrangeRepositoryMock等
我想保持它开放,以便我可以使用EF或NHibernate - 再次,如果我的IOrangeRepository处理POCO然后我会通过实现OrangeRepositoryNHibernate等将其封装在Repository本身中.
我在正确的路线上吗?
谢谢
编辑:感谢您的反馈,我没有其他任何人在此刻反弹这些想法,所以感谢!
是的,您的版本是最安全/最兼容的版本.您仍然可以将它与任何资源一起使用,不仅包括数据访问资源,还包括Web服务,文件等.
请注意,使用IQueryable版本,您仍然可以根据您的POCO课程开始工作,但您必须与IQueryable相关联.还要考虑你可能有使用IQueryable的代码然后结果你遇到了一个存储库的ORM没能很好地处理它的情况.
小智 5
我使用与你相同的模式.我很喜欢.您可以从任何资源获取数据.
但使用IQuerable的优点是您不必像OrangeCriteria那样编写自己的标准API.
当NHibernate获得完整的Linq支持时,我可以切换到IQueryable.
然后你得到
public class OrangeRepository: IOrangeRepository {
public IQueryable<Orange> GetOranges();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2859 次 |
最近记录: |