是否有多个存储库会增加资源使用量?
我已按照本教程添加了一个包含数据库上下文的存储库服务:https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api
在教程中,存储库用于管理Todo项目。在我自己的应用程序中,我有几种不同类型的项目和活动,我需要一个上下文。我应该为每个创建一个单独的存储库吗?例如,一个用于查询的存储库,另一个用于用户使用指标这样做是否有任何开销或处罚?
答案 0 :(得分:3)
我应该为每个创建一个单独的存储库吗?例如,一个用于查询的存储库,另一个用于用户使用指标这样做是否有任何开销或处罚?
是。否。
通常,您希望每个实体类型一个存储库,因为除了陈词滥调的CRUD操作之外,每个实体类型很可能需要特定于其类型的操作。回购的目的是消除重复的数据查询逻辑,否则会对您的应用程序产生影响。
e.g。
interface IRepo { CRUD }
protected abstract class RepoBase<T> : IRepo
{
// CRUD implementation
}
public class PatientRepo : RepoBase<Patient>
{
List<IPatient> GetAllTerminallyIllPatients();
}
public class MusicRepo : RepoBase<Music>
{
List<ISong> GetAllSongsByArtist (string artist);
}
请注意我的微弱示例中的每个repo如何根据实体类型进行自定义。如果你没有这样做,你的单一回购将很快
您可能需要考虑将您的存储库拆分为repos 和 工作单元类,因为:
存储库不应具有数据库的语义。这应该 就像内存中的对象集合一样,不应该像方法那样 更新并保存。 - Mosh
您可以从以下链接中的教程中了解更多信息。
是否有多个存储库会增加资源使用量?
通常不会,因为对于任何给定的操作,所有感兴趣的回购将附加到相同的数据库上下文实例。这是一个昂贵的背景,而不是回购。
答案 1 :(得分:0)
如提供的链接所示,Repository模式可用于将数据访问抽象为接口,例如:ITodoRepository
。
为什么要抽象数据访问?通过这种方式,您可以通过实现不同的ITodoRepository
类来轻松切换数据访问层。如果您想使用单元测试来测试逻辑,或者如果存在可能性,您将来不再使用实体框架。< / p>
如果不是这种情况,并且您正在构建一个没有此类添加项目的小项目(单元测试/交换机数据访问层)使用存储库模式只是额外的工作而没有任何好处。
因此,您应该决定使存储库模式的额外工作是否超过项目的好处。