我正在使用带有实体框架、通用存储库和服务层的 SQL Server 2012。我打算始终使用 EF 和 SQL Server。
这工作正常,但有人建议我在 EF 的内置存储库之上真的不需要通用存储库。
有人可以告诉我使用通用存储库是否有任何优势?我不是在寻找关于其中一个或另一个的意见,因为过去的经验告诉我,一旦提到意见这个词,问题就会被人们关闭:-(
我正在使用带有实体框架、通用存储库和服务层的 SQL Server 2012。我打算始终使用 EF 和 SQL Server。
这工作正常,但有人建议我在 EF 的内置存储库之上真的不需要通用存储库。
有人可以告诉我使用通用存储库是否有任何优势?我不是在寻找关于其中一个或另一个的意见,因为过去的经验告诉我,一旦提到意见这个词,问题就会被人们关闭:-(
您的建议在 ORM 世界中也被称为二级缓存。虽然它可以大大提高性能,但很难正确实施。这里有一些资源可以探索优缺点,并讨论实现细节:
http://msdn.microsoft.com/en-us/magazine/hh394143.aspx
http://queue.acm.org/detail.cfm?id=1394141
向数据层添加数据模式(例如通用存储库模式)提供了一定程度的抽象,这反过来又具有使您的代码可测试等优势。
附带说明一下,您可能要考虑与 GR 耦合的另一种数据模式是工作单元模式。这将允许您对事务进行分组并执行逻辑操作,例如提交和回滚更改。
我个人认为使用这种模式没有任何性能提升,但它确实使开发更容易,并使代码更易于维护,我认为这是一个优点。
存储库模式用于持久化和检索域的聚合(聚合是包括实体和值对象(DDDesign)的东西)。实体框架默认支持 UnitOfWork 模式(context.SaveChanges()),您仍然需要存储库模式来检索和持久化您的聚合和实体。大多数人使用 UnitofWork 并在数据访问层处理 CRUD 操作,但正如我现在提到的,实体框架支持 unitofwork,您以后只能在存储库中使用存储库模式。
看到这篇博文,希望对你有帮助:
http://ehsanghanbari.com/Post/23/layer-supertype-pattern-with-example-in-c