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

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

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

最佳答案



是的。不。

通常,您希望 每个实体类型 有一个存储库,因为除了陈词滥调的 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);
}

请注意我的弱示例中的每个 repo 是如何根据实体类型定制的。如果你不这样做,你的单一 repo 会很快
  • 变得很难找到你想要的方法
  • 无法管理,可能有 100 多种方法
  • 由于所有代码都在一个文件中,
  • 导致源代码控制冲突的可能性增加

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



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



    通常不会,因为对于任何给定的操作, 所有您感兴趣的 repos 都会 附加到 相同的数据库上下文实例 。昂贵的是上下文,而不是 repo 。

    告诉我更多
  • Repository Pattern with C# and Entity Framework, Done Right
  • 关于c# - 我应该有多个存储库吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43087020/

    10-16 10:02