通用存储库和泄漏抽象

戴夫·纽

我正在实现存储库模式。我的主要原因是:

  • 使客户端代码脱离持久性规范的抽象(实体框架)
  • 支持可测试性

通用存储库吗?

我遇到的问题是我是否应该拥有通用存储库。一种IQueryable<T> Query()方法将为调用代码提供构造特定查询的方法。这里的问题是,这是泄漏的抽象-实体框架的详细信息现在正在泄漏到我的客户端代码中。

在此处输入图片说明

  • 这将如何影响单元测试?我仍然可以ICustomerRepository通过此实现来模拟吗?

  • 这种效果将如何淹没我的持久层?像Azure存储表或NHibernate。

否则我将不得不实行非常具体的查询方法ICustomerRepository,如GetIsActiveByFirstName()GetIsActiveByDistrict()我非常不喜欢这个,因为我的存储库类将被不同的查询方法挤满。该系统具有数百种模型,因此可能有数百种甚至数千种这样的方法来编写和维护。

菲尔·苏迪

IRepository<T>坚持使用图案可以保持相对干净

数据访问层

  • 参考EF和核心项目
  • 拥有 Respository<T> : IRepository<T>
  • 选项具有IEFJunk声明(仅在使用多个存储库时)
  • 参考核心
  • 向存储库注入Context(通常在实例化期间)

核心

  • 可以“注入”的接口
  • IRepository声明。没有EF数据类型时使用。
  • 没有提及EF

因此,现在Core中的代码可以引用了IRepository<t>实现类可以具有EF详细信息。但这不能从核心访问!

这样您就可以使用IQueryable。

  public interface IRepositoryBase<TPoco>{
     IQueryable<TPoco> GetListQ(Expression<Func<TPoco, bool>> predicate);
  //...

如果您确定要添加则

 //...
 // logically exposing  IQueryable<T> Include<T>(this IQueryable<T> source, string path) from EF
 IQueryable<TPoco> IncludeNAVProp(string navToInclude);
 }

然后执行存储库

return  Context.Set<TPoco>().Include(navToInclude);

要求基础提供者为EF。因此,现在的模拟是针对实际的EF提供程序的。

除非您小心,否则为EF专用代码。泄漏出去。实际上,具有概念“包含”的接口IRepository已被视为泄漏。避免将EF详细信息保留在您的界面之外是避免泄漏的关键。
而且你可以有1IRepository<t>个1Respository<t>表和支持100S

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通用存储库和泄漏抽象

来自分类Dev

使用通用存储库和存储过程

来自分类Dev

通用存储库模式和多项选择

来自分类Dev

抽象和通用方法

来自分类Dev

使用存储库模式,如何在不创建泄漏抽象的情况下引用域模型?

来自分类Dev

通用存储库问题

来自分类Dev

通用存储库问题

来自分类Dev

通用存储库中的DbContext和DbSet问题

来自分类Dev

我可以在整个项目中使用通用存储库和通用服务类吗?

来自分类Dev

如何从通用存储库调用通用类

来自分类Dev

Java中的通用存储库

来自分类Dev

模拟通用存储库/ UnitOfWork

来自分类Dev

nhibernate通用存储库queryover

来自分类Dev

与通用存储库方法斗争

来自分类Dev

通用存储库的缓存失效

来自分类Dev

CastleWindsor,通用存储库和两个数据库上下文

来自分类Dev

使用通用存储库和IoC在运行时更改数据库

来自分类Dev

具有不同数据库,实体类型和dbcontext的通用存储库

来自分类Dev

您是否将文件处理逻辑放在存储库中?(在EF中使用通用存储库和UoW模式)?

来自分类Dev

Azure存储/文件系统抽象库

来自分类Dev

如何将Breeze与通用工作单元和存储库一起使用?

来自分类Dev

使用Moq进行单元测试的通用工作单元和存储库模式框架

来自分类Dev

将多个DbContext与通用存储库和工作单元一起使用

来自分类Dev

EF中具有通用接口和DI的存储库模式

来自分类Dev

具有通用服务和存储库代码的.NET Core依赖注入错误

来自分类Dev

使用Moq进行单元测试的工作单元和通用存储库模式框架

来自分类Dev

通过具有通用存储库和工作单元的实体框架获取多个表数据

来自分类Dev

EF通用存储库和工作单元-使用Moq进行单元测试

来自分类Dev

使用NUnit和NSubstitute对通用存储库进行单元测试

Related 相关文章

  1. 1

    通用存储库和泄漏抽象

  2. 2

    使用通用存储库和存储过程

  3. 3

    通用存储库模式和多项选择

  4. 4

    抽象和通用方法

  5. 5

    使用存储库模式,如何在不创建泄漏抽象的情况下引用域模型?

  6. 6

    通用存储库问题

  7. 7

    通用存储库问题

  8. 8

    通用存储库中的DbContext和DbSet问题

  9. 9

    我可以在整个项目中使用通用存储库和通用服务类吗?

  10. 10

    如何从通用存储库调用通用类

  11. 11

    Java中的通用存储库

  12. 12

    模拟通用存储库/ UnitOfWork

  13. 13

    nhibernate通用存储库queryover

  14. 14

    与通用存储库方法斗争

  15. 15

    通用存储库的缓存失效

  16. 16

    CastleWindsor,通用存储库和两个数据库上下文

  17. 17

    使用通用存储库和IoC在运行时更改数据库

  18. 18

    具有不同数据库,实体类型和dbcontext的通用存储库

  19. 19

    您是否将文件处理逻辑放在存储库中?(在EF中使用通用存储库和UoW模式)?

  20. 20

    Azure存储/文件系统抽象库

  21. 21

    如何将Breeze与通用工作单元和存储库一起使用?

  22. 22

    使用Moq进行单元测试的通用工作单元和存储库模式框架

  23. 23

    将多个DbContext与通用存储库和工作单元一起使用

  24. 24

    EF中具有通用接口和DI的存储库模式

  25. 25

    具有通用服务和存储库代码的.NET Core依赖注入错误

  26. 26

    使用Moq进行单元测试的工作单元和通用存储库模式框架

  27. 27

    通过具有通用存储库和工作单元的实体框架获取多个表数据

  28. 28

    EF通用存储库和工作单元-使用Moq进行单元测试

  29. 29

    使用NUnit和NSubstitute对通用存储库进行单元测试

热门标签

归档