首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该有多个存储库吗?

我应该有多个存储库吗?
EN

Stack Overflow用户
提问于 2017-03-29 07:25:26
回答 2查看 4.7K关注 0票数 4

拥有多个存储库会增加资源使用吗?

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-29 09:02:30

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

是。不是的。

通常,您希望每个实体类型都有一个存储库,因为每个实体类型都非常可能需要特定于其类型的操作,而不是传统的CRUD操作。repo的目的是消除重复的数据查询逻辑(),否则这些重复的数据查询逻辑就会散落在应用程序上。

例如:

代码语言:javascript
复制
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);
}

请注意,我的弱示例中的每个回购都是如何定制为实体类型的。如果你不这么做,你的一次回购就会很快

  • 很难找到你想要的方法
  • 无法管理的方法的潜在潜力
  • 由于所有代码都在一个文件中,导致源代码控制冲突的概率增加。

您可能需要考虑将您的repos划分为repos、和工作单元,因为:

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

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

拥有多个存储库会增加资源使用吗?

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

多告诉我一些

票数 7
EN

Stack Overflow用户

发布于 2017-03-29 08:29:31

如提供的链接所示,在示例ITodoRepository中,可以使用存储库模式将数据访问抽象到接口中。

为什么要抽象数据访问?通过这种方式,您可以轻松地通过实现一个不同的ITodoRepository类来切换数据访问层,比如,如果您想用单元测试测试您的逻辑,或者如果将来您将不再使用实体框架,那么您就可以轻松切换数据访问层。

如果不是这样的话,并且您正在构建一个小项目,没有这样的未来添加(单元测试/交换数据访问层),而使用存储库模式只是额外的工作,没有任何好处。

因此,您应该决定制作存储库模式的额外工作是否超过了项目的好处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43087020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档