当前位置: 首页 > 知识库问答 >
问题:

接口隔离,在“复合”存储库模式上使用它是否有效

况繁
2023-03-14

我正在使用实体框架作为我的ORM,我正在使用一个存储库的存储库(?)抽象出EF以便模拟出etc和测试等。

一次回购。

public interface IRepository<T> : IView<T>
{
    IQueryable<T> GetAll();
    void Update( T entity );
    void Delete( T entity );
    void Add(T entity);
    T Default();
}
   public interface IRepoOfRepos
    {
        IRepository<Table_a> Table_as { get; }

        IRepository<Table_b> Table_bs { get; }

        IRepository<Table_c> Table_cs { get; }

在我们的应用程序中,我们有一系列执行离散业务逻辑块的“模块”,我正计划将“IrepoofRepos”“注入”每个模块中。

然而,另一个团队成员建议,我们应该创建一个额外的层(接口),仅包含每个模块所需的数据访问方法(也就是实体中的“I”)。

我们有相当多的模块(30多个),对于一个我觉得可能不适用于数据访问层而真正针对业务层的原则来说,这似乎是相当多的额外工作?

您的想法非常感谢和提前感谢!

共有1个答案

傅树
2023-03-14

有一堆问题已经涉及到了这一点:

如何正确使用存储库模式?(最佳)

每个表一个存储库还是每个功能部分一个存储库?
存储库模式的最佳实践是什么?
在JPA中每个表都应该有一个存储库吗?

如果您的数据访问层只是提供iRepository 的实现,那么它并不能实现它的目的。看看我链接的第一个问题--它很有教育意义。

 类似资料:
  • 我正在尝试学习存储库模式,似乎有点困惑,当我急于加载关系并将db逻辑排除在控制器之外时,如何使用此存储库模式。 快速概述我的存储库/应用程序结构。 示例ProductInterface。php 示例类别接口。php 好的,最简单的部分是使用DI向控制器注入模型依赖关系。 列出与相关产品的所有类别更加困难,因为我不再使用雄辩的模型。我正在使用一个界面,它没有暴露所有雄辩的方法。 如果我没有在我的El

  • 简介 接口隔离原则(英语:interface-segregation principles, 缩写:ISP)指明没有客户(client)应该被迫依赖于它不使用方法。接口隔离原则(ISP)拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口(role interfaces)。接口隔离原则(ISP)的目的是系统解开耦合,从而容易重构,更

  • 我有一个表单,如果我使用存储文件,是整个文件内容存储在数据库还是只是文件路径? 假设我有几十万或几百万个文件。因为表的大小必须很大,所以将它们存储在数据库中是否有效? 如果我不想把它们存储在数据库中,简单的上传并保存在本地文件系统中,有没有办法得到所有文件名的列表?通过将它们存储在数据库中,我只需通过以下方式获得: 谢谢

  • 问题内容: 为了将提交分支的名称隔离到可以在日志中打印出的变量中,需要对以下内容进行哪些具体更改? 在以下情况下,分支的名称为。 具体细节如下: Jenkinsfile: 以下代码在通过运行命令产生的输出中间打印出分支名称,但是当后续代码行()尝试打印命令的封装结果时,此信息会丢失: 结果日志: 结果日志输出为: 重述的问题: 为了在日志中输出以下行,需要如何修改上述Jenkinsfile: 问题

  • 我见过存储库模式的各种用法。我倾向于一种我很少看到的模式,我想知道这是否有充分的理由。 例子: 利益 构造函数将是内部的,只能通过工厂模式访问,所以我不担心这里的复杂性。 IPerson 强制实现 Save() 方法,但教师不需要知道它是如何持久化的 工作原理类似于实体框架代理对象 我可以在 Iperson 对象上调用 Save(),而无需知道它是老师 应用- 欺骗 > 业务对象不再是普通的旧C#

  • 关于存储库模式,我有几个问题: > 如果我只使用离线数据库(例如Room with LiveData),是否使用存储库模式? 如果我的应用程序现在离线,但将来会连接到远程数据库,那么我应该实现存储库模式还是以后再做就不会有问题了?