- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
不确定使用严格的全局状态实现是否会失败。什么时候单例不适合应用程序?
最佳答案
如果您正在进行单元测试,单例通常是个坏主意,不进行单元测试(或 BDD 或验收测试)通常是个坏主意。
使对象具有全局状态意味着您编写的涉及这些对象的单元测试将相互隔离和脱节。相反,您将不得不担心为每个测试重置状态,相信我……这永远不会 100% 完成。如果您不重置全局状态,那么您会开始在测试中遇到非常奇怪且难以调试的错误,这些错误会浪费时间。
全局状态还会增加代码的耦合度,使其难以重构。
理想的方法是使用 IoC/DI 容器(Spring、Guice 等)来请求对象。这些容器通常具有使对象显示为“单例”的方法,但它们也有根据情况修改该行为的方法(即单元测试与您的域代码)。
这当然取决于您问题的大小。如果你正在拼凑一个 4-class 测试平台来尝试一些东西,那么继续使用 Singleton。但是,一旦该项目开始运作并变得更大、更复杂,就将 Singleton 重构出来。
关于java - 单例设计模式 : Pitfalls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448393/
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this q
有一天,我关心代码中参数的生命周期,如下所示: void someMethod(final ComplexObject arg1, ComplexObject arg2) {
由于绝望的时代需要古怪的措施,我在 C++ 中实现了以下内容。 -- 有一个名为 foo 的类。我需要一个名为 bar 的类中的 foo 实例(对象或引用,而不是指针)。 -- 我不想在 bar.h
下个月我将指导一个 ACM 团队(请看图),现在是时候讨论 C 中的字符串了。除了讨论标准库、strcpy、strcmp 等,我想给他们一些提示(比如 str[0] 等同于 *str 之类的东西)。
在我的整个开发生涯中,我只长时间使用 MySQL,对于客户,我们现在需要使用 Oracle 数据库进行一些性能测试和调优。 我应该注意从使用 MySQL 到 Oracle 的任何明显陷阱? 到目前为止
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我们的遗留应用程序受制于一个可怕的框架(好吧,我会说出名字,它是 Tapestry 4),该框架涉及荒谬数量的 EventListeners(约 100,000 个)用于最简单的操作。我猜这超出了 j
我们在这里有点迷失了。我们需要使我们的应用程序可安装在具有 80 多台 Citrix 服务器的网络上。尽管我们的应用程序是 100% 有效且可运行的 .NET,但我们经历了一些(对我们来说很奇怪的)行
我在为 DOM 中动态生成的元素编写处理程序时遇到问题。 我的对象由一些属性和一些方法组成 function JMaze(c,r,selector) { this.maze = new Arra
要在安装后立即激活 service worker,我使用 self.skipWaiting()在安装监听器中。要立即控制页面(无需页面导航,例如页面加载),我使用 self.clients.claim
我今天正在帮助某人从我们作为 txt 文件读入的 pdf 文件中正则表达式一些信息。不幸的是,tm 包 readPDF 功能当时无法正常工作,尽管通过一些修改我们能够让它正常工作。当我们正则表达式从
我是一名优秀的程序员,十分优秀!