当我们在框架环境中谈论单例模式时,它仍然很糟糕吗?

乔纳森

使用单例模式通常会产生代码异味。

但是,似乎在Laravel之类的框架中使用“单件”是许多问题的流行解决方案。

还值得注意的是,在以下意义上,Laravel中的单身人士与单身人士类并不是一回事:

  • 用作单例的类没有意识到这一点,那里没有静态方法,也没有什么可以阻止您手动创建该类的新实例。
  • 使用Laravel单例时,容器会跟踪要用作单例的对象,并根据请求将这些对象交给您。

我是否理解正确,在Laravel中所谓的单例实际上并不是单例,而是受单例模式启发的实现,因此,它不像真正的单例那样糟糕,因为它被摆脱了一些不利因素(难以测试,全球状况...)?

该问题与有关PHP中设计模式的问题大致相关,但对于我来说,创建一个单独的问题似乎很合适。

毛圈

是的,它仍然很糟糕。它仍然是一种反模式。

事实上,您看到许多人都在诉诸这一事实,只是表明任何给定系统中的缺陷。它适用于应用程序,框架和库。

“我们的单身人士是不同的”是错误的。而且,如果您正在编写适当的单元测试,则将隔离测试代码,而不必初始化框架的各个部分。

PS:
您似乎对“代码气味”有错误的看法。代码气味是当您具有名为的变量$a1$bzzzz,代码气味是当您的函数具有8个参数时。Anit模式不是代码气味。这是体系结构中的错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将默认bean作用域设为单例,并发调用发生时不是很糟糕吗?

在 GPU 上计算大量数据时,我可以听到它的声音 - 这很糟糕吗?

当我们使用 getBean 方法创建原型 bean 时,是否创建了 bean 属性(单例)的新实例?

我们谈论R中的引用类型和原始类型吗?

当我们使用 corr.() 时,我们应该关心 DataFrame 中的 NA 数据吗?

在无头模式下,元素不可单击。但是,当我们从protractor.conf.js中删除headless时,它工作正常。

当我们有ViewModels时,我们还需要onSaveInstanceState()吗?

当我们谈到 RPC 时,我们指的是 Windows 上的特定技术吗?

我们应该密封单例吗?我们是否应该首先尝试从Singletons继承?

Android:扩展应用程序类。为什么我们需要实现单例模式?

我们如何以单例模式存储URL和时间戳?

为什么我们不能在其他线程中更新视图,当我们这样做时,它报告异常,是什么原因

我们可以创建哈希映射键单例吗?

如果我们不执行实际分配,它仍然是 O(n) 空间吗?

在Haskell中,当我们使用do块时,它如何确定要使用哪个monad?

当我们在Chrome中测试webrtc时,它使用的是用Android编写的本机代码和jni代码

当我们单击它时,如何访问通过<a>标记发送的console.log中的prop?

单击它后更改图标以及当我们单击 html 中的其他按钮时

当我们需要修剪时,我们不需要在oracle中

当我们在 stenciljs 中制作 web 组件时,如何处理其他框架的路由?

多线程环境中的单例模式

当我们覆盖一个方法时,我们应该使用方法签名中的所有参数吗?

当我们返回完全相同的函数时,函数式编程中是否存在已知模式?

当我们在 Bean 是单例的情况下调用 new Bean() 时会发生什么?

当我们向它添加事件时如何从android日历获取数据?

当我们想要删除它时,为什么要在集合名称后添加“s”?

当我们在WebStoreContext中注入IWorkContext时,它给出了错误

当我们在jquery中使用每个函数时,我们应该添加return false,对吗?

我们可以使用 conda 在调试模式下构建 python 环境吗?