gpt4 book ai didi

c# - 我可以只对整个项目使用通用存储库和通用服务类吗?

转载 作者:行者123 更新时间:2023-11-30 16:11:46 24 4
gpt4 key购买 nike

有这个通用的存储库实现

http://www.itworld.com/development/409087/generic-repository-net-entity-framework-6-async-operations

从外观上看,我似乎可以为我的整个项目和数据库中的几乎所有实体使用一个通用存储库,它可以正常工作。对于没有的,我可以创建一个更具体的存储库,例如MembershipRepository 派生自基础存储库并根据需要覆盖方法,例如 Find。

现在也可以编写一个通用服务类....类似于上面的内容,然后只创建一些更具体的服务。

这将大大减少项目规模。无需为每个实体编写冗余存储库,并且服务层类的数量要少得多。

当然不会这么简单。这有什么问题吗?让我们暂时忽略 EntityFramework 内置了存储库+UOW 模式,不需要存储库模式。

最佳答案

我们有。

老实说,我为此感到很痛苦。对于较小的域,它非常好并且可以享受。对于较大的(比如我目前正在使用的那个),您的存储库永远不可能足够通用以保证只有一个。

例如,我目前使用的代码库中的通用存储库现在充斥着各种非常具体的方法,例如急切获取、分页等。它比它开始的时候要多得多。回顾修订历史,它曾经只有GetAllGetByIdCreateUpdate方法。现在它有像 GetAllEagerFetch 这样的东西,带有各种 JOIN 类型的重载,GetAllPagedGetAllPagedEagerFetchDeleteByIdExecuteStoredProcedureExecuteSql(恶心)等等。还有很多。

解决此问题的一种方法是可能遵循 Interface Segregation Principle这样您的存储库就可以庞大而通用,但消费者只关心他们需要关心的内容。不过我不是特别喜欢那样。

话虽这么说 - 我们已经在最近的项目中放弃了 Repository 风格的设置。我们更喜欢 CQRS现在使用具有特定用途的 CommandQuery 对象进行设置。这更倾向于 Single Responsibility Principle相反(不遵循它到“Uncle Bob degree”..但是类有一些明确定义的职责)。

关于c# - 我可以只对整个项目使用通用存储库和通用服务类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24051408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com