【问题标题】:What is the best practices of making a repository class with EF4 code first?首先使用 EF4 代码创建存储库类的最佳实践是什么?
【发布时间】:2011-01-22 19:10:57
【问题描述】:

似乎有很多方法可以应用存储库模式,这就是为什么我需要您的意见以及关于什么似乎是应用存储库模式的最佳方式的明确答案。它是通用存储库吗?但是存在一个问题,即某些域对象与其他域对象的行为不同。它是指定存储库吗?存储库之间的代码重复怎么办?它是两者的组合吗?对这两种实现都使用 di 容器怎么样?

谢谢

编辑:我使用的 orm 是实体框架 4。如果有一个 EF4 的例子会很好。

【问题讨论】:

    标签: c# model-view-controller asp.net-mvc-2 design-patterns


    【解决方案1】:

    存储库模式本身在需要规范的领域非常明确。其余部分是故意省略的,因为这取决于我的外部因素,例如您的编程语言、项目范围和您的个人编程风格。

    换句话说:您似乎在询问如何应用该模式的模式,但最终您必须在编程时做出自己的决定。

    不过,我会尝试回答您更具体的问题:

    • 是的,使用泛型是存储库的好主意。另一种方法是为所有应该存储的对象提供一个通用接口。根据您的要求,您也可以同时使用两者。
    • 尝试通过在要存储的对象上调用多态方法来处理对象行为的差异。
    • 如果操作正确(通过使用泛型和/或接口),则不应出现代码重复。

    【讨论】:

      【解决方案2】:

      This post by Gabriel Schenker 很好地解释了存储库模式。他用 NHibernate 实现它(你没有说你使用的是哪个 ORM)并提供了一个通用的基础存储库。对我来说,存储库模式与测试非常相关,并且能够伪造或模拟它,这篇博文还展示了如何制作自己的伪造品。

      根据我的经验,大多数存储库都有一些共同的功能,例如GetById,添加,删除。所以拥有一个可以被继承的基类是很有用的。当您开始考虑动态 Linq 查询以及如何测试这些查询时,它会变得有点棘手。

      可以在 herehere 找到使用 Linq 的存储库模式示例,但我会从简单的开始,因为这些对于某些项目来说可能是多余的。

      【讨论】:

      • 很好的解释,你有什么时候使用动态 linq 查询的例子吗?
      • 我添加了两个链接,展示如何将 Linq 与 NHibernate 一起使用。
      • 对不起,我刚刚意识到我没有说我使用的 orm 是实体框架 4。你有 ef4 的例子吗
      • 抱歉,自 1.0 版以来真的没有对 EF 做过任何事情。但是,如果您稍微搜索一下,我相信您会找到几个 EF4 通用存储库的示例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 2011-01-24
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      相关资源
      最近更新 更多