拥有多个存储库会增加资源使用吗?
我按照本教程添加了包含数据库上下文的存储库服务:https://learn.microsoft.com/en-us/aspnet/core/tutorials/first-web-api
在本教程中,存储库用于管理Todo项。在我自己的应用程序中,我有几种不同类型的项目和活动,我需要一个上下文。我应该为每个人创建一个单独的存储库吗?例如,一个用于查询的存储库,另一个用于用户使用度量?这样做有任何开销或处罚吗?
发布于 2017-03-29 09:02:30
我应该为每个人创建一个单独的存储库吗?例如,一个用于查询的存储库,另一个用于用户使用度量?这样做有任何开销或处罚吗?
是。不是的。
通常,您希望每个实体类型都有一个存储库,因为每个实体类型都非常可能需要特定于其类型的操作,而不是传统的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);
}请注意,我的弱示例中的每个回购都是如何定制为实体类型的。如果你不这么做,你的一次回购就会很快
您可能需要考虑将您的repos划分为repos、和工作单元,因为:
存储库不应该具有数据库的语义。它应该像内存中的对象集合,而不应该像更新和保存这样的方法。- 莫什
您可以从下面的链接中了解更多的教程。
拥有多个存储库会增加资源使用吗?
通常不会,因为对于任何给定的操作,所有感兴趣的repos都是附加到相同的数据库上下文实例。昂贵的是上下文,而不是回购。
多告诉我一些
发布于 2017-03-29 08:29:31
如提供的链接所示,在示例ITodoRepository中,可以使用存储库模式将数据访问抽象到接口中。
为什么要抽象数据访问?通过这种方式,您可以轻松地通过实现一个不同的ITodoRepository类来切换数据访问层,比如,如果您想用单元测试测试您的逻辑,或者如果将来您将不再使用实体框架,那么您就可以轻松切换数据访问层。
如果不是这样的话,并且您正在构建一个小项目,没有这样的未来添加(单元测试/交换数据访问层),而使用存储库模式只是额外的工作,没有任何好处。
因此,您应该决定制作存储库模式的额外工作是否超过了项目的好处。
https://stackoverflow.com/questions/43087020
复制相似问题