【发布时间】:2013-06-10 16:20:44
【问题描述】:
我经常看到使用存储库模式来抽象 ORM 的代码。为什么这样做? ORM 不是已经是一个抽象并且本身就充当了一个存储库吗?
有没有很大的区别
public class EmployeeRepo
{
GetById(int id) { //Access ORM here };
}
消费数据:
public class MyController{
private EmployeeRepo = _Repo = new EmployeeRepo();
public ActionResult ShowEmployee(int id)
{
var emp = _Repo.GetById(id);
//Versus
var emp = ORM.Where(e => e.Id == id);
return View(emp);
}
}
我为什么要重新创建 ORM 已经提供给我的东西?
【问题讨论】:
-
如果你有一个“通用”存储库层,你就独立于你正在使用的实际 ORM/数据库。它还用作可以独立于实际数据库进行测试的层。但它需要更多的工作 - 显然 - 所以它在小型应用程序中可能没有意义。但在企业开发环境中,有数十名开发人员在开发应用程序,拥有一个不需要任何知识或经验的存储库层就容易得多。
-
@marc_s 如果您使用存储库来抽象您正在使用的数据库和实现,我可以理解,但是 ORM 已经这样做了,因此开发人员不必知道任何特定于数据库的信息,除非某些情况。我认为从事项目的开发人员应该对正在使用的技术有很好的了解,否则他们最终可能会错误地使用它,就像任何框架一样,都有最佳实践。
标签: c# orm repository abstraction