存储库是单例还是静态还是都不是?

2024-02-23

我有一个 ASP.NET 网站,它使用域驱动设计并使用存储库进行数据库操作。
我想知道单例存储库和静态存储库以及每次访问都会新增的简单存储库类的优缺点是什么?
此外,如果有人可以比较并指导我使用其中的哪一个,我将不胜感激。


静态和单例对于存储库模式来说不是很好的解决方案。如果您的应用程序将来将使用 2 个或更多存储库怎么办?

IMO 最好的解决方案是使用依赖注入容器并将 IRepository 接口注入需要它的类中。

我建议你读一本关于领域驱动设计的好书和一本关于依赖注入的好书(比如Mark Seeman的.NET 中的依赖注入 http://www.manning.com/seemann/).


使用单例和静态类,您的应用程序将无法扩展

您有两个单例存储库:

class Repository<TEntity> {

  static Repository<TEntity> Instance { get { ... /*using sql server*/ } }
}

class Repository2<TEntity> {

  static Repository2<TEntity> Instance { get { ... /*using WCF or XML or any else */ } }
}

使用它们的服务必须具有对其中之一或两者的静态引用:

class OrderService {

    public void Save(Order order) { Repository<Order>.Instance.Insert(order); }
}

如果存储库是静态引用的,如何使用 Repository2 保存订单?

更好的解决方案是使用 DI:

interface IRepository<TEntity> { ... }

class SqlRepository<TEntity> : IRepository<TEntity> { ....}

class OrderService {
    private readonly IRepository<TEntity> _repo;

    public OrderService(IRepository<TEntity> repo) { _repo = repo; }

    public void Save(Order order) { repo.Insert(order); }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储库是单例还是静态还是都不是? 的相关文章

随机推荐

  • Sinatra 不会在 Chrome 上通过重定向保持会话

    Sinatra 不会通过 Chrome 上的重定向来保留我的会话 它正在创建一个全新的会话 而我正在丢失以前的所有会话数据 举个例子 类似于西纳特拉文档 http www sinatrarb com intro Browser 20Redi
  • Javascript - 需要在 setInterval 函数之外使用clearInterval

    基本上 我拥有的是函数内的 setInterval 我想做的是 从外部控制它的行为 这就是我所拥有的 function wheee var i 1 slideee setInterval function sliderContent sty
  • 如何将字节数组转换为 NSString

    我正在从 TCP IP 流读取数据 并成功从预先存在的服务器接收字节数组 我现在正在尝试找到一种方法将该数组转换为NSString 我找到了几个例子 但很难得到我想要的结果 NSData data NSMutableData alloc i
  • npm本地安装

    过去 当我使用 npm gt 1 0 安装软件包时 它们会在本地安装 但现在不再了 我的设置 首先我使用nvm https github com creationix nvm安装node js 我的操作系统 alfred alfred la
  • 检测存在哪些 Unicode 字形?

    JavaScript CSS web 中有没有办法检测系统是否具有某个 Unicode 字符的有效字形 例如 我想检测某种语言中的某个字符是否显示为方框 因为用户没有显示这些 Unicode 点的字体 或者他们是否确实会看到这些字符 这里描
  • 属性与实例变量[重复]

    这个问题在这里已经有答案了 可能的重复 Objective c cocoa cocoa touch 中的 实例变量 和 属性 之间有区别吗 https stackoverflow com questions 843632 is there
  • 如何为 asp.net 身份创建安全标记值 (IUserSecurityStampStore)

    在我的 MVC 5 应用程序中 我必须手动创建安全标记值 身份团队当前的实现似乎使用了指南 Guid NewGuid ToString D 我自己创建一个新的 Guid 来用作新的安全标记值是否安全 或者这是否会在将来的 ASP NET 身
  • Mongo PHP 驱动程序 1.2.10 与 MAMP

    我正在尝试让最新的 Mongo 驱动程序与 OS X 10 5 8 上的 MAMP 1 9 6 一起使用 我从源代码成功构建了它 因为似乎没有预编译版本 将其包含到正确的目录中并重新启动了 apache 但 PHP 无法识别该扩展名 我之前
  • CSS:发光文本,发光非常宽和高

    几天以来我一直在研究 box shadow 和 text shadow 我正在努力获得以下效果 我想要从文字中散发出光芒 a 一度盘旋 很简单 这应该很容易 因为我探索了使用文本阴影 好的 但它适用于小发光 我的意思是 一旦发光较大 由于其
  • Eclipse 在接口方法签名中生成无用的“公共抽象”修饰符

    在使用 Eclipse 重构工具提取方法时 有没有办法阻止生成无用的内容public abstract接口方法签名中的修饰符 谢谢阿列克谢 这听起来像是一个 Eclipse 错误 但它有一个解决方法 该错误自 2004 年 8 月 9 日起
  • CFHTTPMessageAddAuthentication 无法向请求添加身份验证数据

    我正在尝试扩展功能SocketRocket https github com square SocketRocket图书馆 我想添加身份验证功能 由于该库正在使用CFNetwork CFHTTPMessage API https devel
  • 如何在离线服务器上安装 npm -g

    我需要在离线服务器上安装 全局 npm 应用程序 安装普通应用程序很容易 npm install 然后打包生成的文件 手动或使用npm pack 但是 如何安装全局应用程序 具有某种安装脚本 例如forever没有互联网 npm insta
  • 在同一个 R markdown 页面中应用多列划分

    我想如图所示分割我的 Rmarkdown 文档 第一部分为一列 其他部分为两列 used onecolumn and twocolumn但每个部分都是在单个页面中创建的 有解决办法吗 This article https journals
  • 如何在jquery中获取tinymce内容?

    我正在尝试获取tinymce数据 但收到tinyMCE未定义错误 这是我的代码 function savePost console log jQuery wp tinymce editor tinyMCE getContent 请检查 Ti
  • 使用 knockout js 和 jquery ui 滑块

    我试图弄清楚knockout js是否可以很好地解决以下问题 我有多个滑块想要链接到文本框 当文本框更改时 相应的滑块必须更新为新值 反之亦然 更改滑块值或文本框时 需要调用一个函数 该函数使用所有文本框的输入来计算结果 我有我的快速但肮脏
  • 从 Google App Engine (Java) 将文件上传到 Google 云存储

    如何将文件从谷歌应用程序引擎中的servlet上传到谷歌云存储 当我这样做时 Google 云存储不知道文件的类型 即我从 HTML 表单发送的文件 编写 HTML JavaScript 和 servlet 将文件上传到云存储的正确方法是什
  • v-dialog Vuetify 的自定义位置

    我需要在页面右下角打开一个具有一定宽度和高度的 v 对话框 但是 我不明白该怎么做 V dialog总是在页面居中 我搜索了官方文档 尝试使用CSS 但无法 有任何想法吗 Note 其他提供的解决方案并不令人满意 因为它们搞乱了转换 或者我
  • 使用exist()的Cloud firestore规则是否算作读取?

    我正在存储被阻止用户的文档集合 我通过检查电子邮件是否存在于被阻止的集合中来检查请求是否来自被阻止的用户 allow read if exists databases database documents blocked request a
  • 如何将当前cygwin目录转换为windows格式

    显示我正在使用的当前目录 pwd在 Cygwin 中运行良好 This document https cygwin com cygwin ug net using effectively html正在解释如何将 cygwin 目录转换为 w
  • 存储库是单例还是静态还是都不是?

    我有一个 ASP NET 网站 它使用域驱动设计并使用存储库进行数据库操作 我想知道单例存储库和静态存储库以及每次访问都会新增的简单存储库类的优缺点是什么 此外 如果有人可以比较并指导我使用其中的哪一个 我将不胜感激 静态和单例对于存储库模