首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是全局状态?它们如何影响可测试性,以及如何避免它们?

问什么是全局状态?它们如何影响可测试性,以及如何避免它们?
EN

Stack Overflow用户
提问于 2011-01-19 19:34:37
回答 3查看 753关注 0票数 3

向下列出各种全局状态,如全局变量、单例对象等。

我读到它们会影响代码的可测试性。您能解释一下全局状态的替代方案,以帮助提高代码的可测试性吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-19 19:49:25

从可测试性的角度来看,全局变量和单例是如此相似,以至于它们不必分开处理。好的OO设计应该像乐高积木一样,拼凑在一起创造出最终的系统。全局变量的主要问题是你会失去隔离。当您使用全局或单例访问您的协作者时,这些类不再是单独的砖块,您可以轻松地获取和重新组织、隔离使用或在另一个项目中重用。当你使用一些依赖于全局变量的类时,你拖拽了设计的其余部分。在测试中,这会产生问题,因为您必须采取额外的步骤来切断从您的类到其合作者的连接,以便您可以单独测试它。(我在我的博客上写了more about this。)

这个问题的一个很好的解决方案是从外部提供类依赖关系。您只需引入某种机制(可能是一个简单的类),它将获取所有独立的积木,并将它们连接到组成应用程序的对象图中。这就是控制反转和依赖注入的全部内容。

票数 4
EN

Stack Overflow用户

发布于 2011-01-19 19:42:35

票数 2
EN

Stack Overflow用户

发布于 2011-01-19 19:41:45

没有不同的全局状态。要么是全局状态,要么不是全局状态。Singleton反模式只是消除了各种初始化难题,但它与全局变量相同。

如何避免全局状态?创建一些本地状态,并传递一个指向它的引用或指针。在绝大多数情况下,全局状态是不必要的。有一些必要的全局状态的实例,比如堆,但它们非常罕见,如果您需要询问,那么您几乎肯定不知道它是否正确。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4734735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档