我应该有多个存储库吗?

Gue*_*lla 4 c# asp.net-core-mvc asp.net-core

拥有多个存储库是否会增加资源使用率?

我按照本教程添加了一个包含数据库上下文的存储库服务:https : //docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api

在教程中,存储库用于管理 Todo 项。在我自己的应用程序中,我有几种不同类型的项目和活动,我需要为其提供上下文。我应该为每个人创建一个单独的存储库吗?例如,一个用于查询的存储库,另一个用于用户使用指标的存储库?这样做有任何开销或惩罚吗?

Mic*_*kyD 5

我应该为每个人创建一个单独的存储库吗?例如,一个用于查询的存储库,另一个用于用户使用指标的存储库?这样做有任何开销或惩罚吗?

是的。不。

通常,您希望每种实体类型有一个存储库,因为除了陈词滥调的 CRUD 操作之外,每种实体类型都可能需要特定于其类型的操作。repo 的目的是消除重复的数据查询逻辑,否则这些逻辑会散落在您的应用程序中。

例如

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);
}
Run Code Online (Sandbox Code Playgroud)

请注意我的弱示例中的每个 repo 是如何根据实体类型定制的。如果你不这样做,你的单一回购会很快

  • 变得很难找到你所追求的方法
  • 无法管理,可能有 100 多种方法
  • 由于所有代码都在一个文件中,导致源代码控制冲突的可能性增加

您可能需要考虑将您的存储库拆分为存储库 工作单元类,因为:

存储库不应具有数据库的语义。它应该像内存中的对象集合,而不是像 update 和 save 这样的方法。-莫什

您可以从以下链接中的教程中了解更多信息。

拥有多个存储库是否会增加资源使用率?

通常不会,因为对于任何给定的操作,您感兴趣的所有存储库都将附加同一个数据库上下文实例。昂贵的是上下文,而不是回购。

告诉我更多