【问题标题】:C#: Repository pattern, is there a standard interface or should i cook my own?C#:存储库模式,有标准接口还是我应该自己做?
【发布时间】:2011-08-01 20:29:34
【问题描述】:

我一直在对存储库模式进行一些研究,并且一直在为存储库滚动我自己的接口。

我想知道是否有一个我可以实现的标准接口具有 Find 方法和类似的东西?

我认为我还需要为 GetProduct、GetProducts 等实现自己的接口?

我也将所有内容都放在一个存储库中,但这似乎变得相当大,我认为我应该将它们分开到不同的存储库中?我假设按照他们的工作(即安全、产品、销售等)将它们分开?

我似乎确实记得看到过一个标准类型的 Repository 接口,我认为每个类都实现了该接口,但我似乎找不到任何对它的引用。

【问题讨论】:

  • 我一直在搞乱 l2s 和 EF 附带的 .tt 文件 - 这是一个好的开始,还可以查看 POCO 入门套件、prism 和 devforce 的示例代码
  • 您使用的是什么 ORM? NHibernate、EF、Linq2Sql?
  • 对我来说很有趣的是,一个关于应该抽象出数据访问方法的模式的问题包含关于您正在使用哪种数据访问方法的问题。存储库不应更改或依赖于您使用的 ORM。
  • 这是我想要实现的标准存储库模式,它不应该依赖于任何类型的数据访问。 Martin Fowler 对此有很好的解释。但如果它真的很重要,我正在使用 EF
  • 现在我更好地理解了 DDD 和 PoEAA 存储库模式之间的区别,我意识到这是一个非常高质量的问题,所以 +1 :)

标签: asp.net-mvc repository-pattern


【解决方案1】:

如果您碰巧谈到域驱动的设计存储库(我认为您一定不能以您谈论它们的方式给出),Steve Bohlen's DDD presentation 的代码提供了一个标准的存储库接口。我不会说它被广泛使用(即是标准的),但它确实非常接近 DDD 指南(即遵循标准)。

如果您谈论的是数据访问层的更一般概念,我肯定不会将其称为存储库,因为与 DDD 概念混淆,并且可能符合相同的方法名称等。像实体框架的 ObjectContext 类,或者甚至只是 ICollection<T>IDictionary<TKey, T> 如果合适的话。

【讨论】:

  • 是的,我说的是存储库模式 (martin fowler),它是位于数据访问和客户端之间的层
  • 哦,所以您说的是 PoEAA 存储库模式(介于 DAL 和域之间),而不是 DDD 存储库模式(存在于域中)。在这种情况下,我的后一段适用。
【解决方案2】:

通过关注相关问题链接,我发现了这篇有趣的博文:Repository or DAO?: Repository

它表示与企业应用架构模式存储库耦合的适当接口是

public interface IRepository<T> : ICollection<T>, IQueryable<T> { }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2011-03-27
    • 2012-06-20
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多