我是否可以在整个项目中使用通用存储库和通用服务类?
作者:互联网
有此通用存储库实现
http://www.itworld.com/development/409087/generic-repository-net-entity-framework-6-async-operations
从外观上看,我似乎可以为我的整个项目建立一个通用存储库,并且对于数据库中的几乎所有实体来说,它都可以正常工作.对于那些不是的,我可以创建一个更具体的存储库,例如从基本存储库派生并根据需要覆盖方法的MembershipRepository,例如Find.
现在也可以编写一个通用的服务类……类似于上面的内容,然后仅创建一些特定的服务.
这将大大减少项目规模.无需为每个实体编写冗余存储库,并且无需编写太多的服务层类.
当然不可能那么简单.有这个问题吗?让我们暂时忽略一下EntityFramework内置了存储库UOW模式并且不需要存储库模式的情况.
解决方法:
我们的确是.
老实说,我为此感到痛苦.对于较小的域,它非常好,并且可以治疗.对于大型存储库(例如我目前正在使用的存储库),您的存储库永远无法真正通用到足以保证一个存储库的通用性.
例如,我当前使用的代码库中的通用存储库现在散布着各种非常特定的方法,用于诸如急切的获取,分页等工作.它的功能远不止于此.回顾修订历史,它曾经只有GetAll,GetById,Create和Update方法.现在,它具有诸如GetAllEagerFetch之类的功能,并具有各种JOIN类型的重载,GetAllPaged,GetAllPagedEagerFetch,DeleteById,ExecuteStoredProcedure,ExecuteSql(糟糕)等等.还有更多.
解决此问题的一种方法是遵循Interface Segregation Principle,以便您的存储库可以庞大而通用,而消费者只关心他们需要关心的内容.我不是特别喜欢.
话虽这么说-在最近的项目中,我们已经不再使用存储库样式的设置.我们现在更喜欢使用具有特定用途的Command和Query对象的CQRS设置.相反,这更倾向于Single Responsibility Principle(不遵循它到“鲍伯叔叔学位”.但是,班级有一些明确定义的职责).
标签:repository-pattern,c,net 来源: https://codeday.me/bug/20191121/2053425.html