向下列出各种全局状态,如全局变量、单例对象等。
我读到它们会影响代码的可测试性。您能解释一下全局状态的替代方案,以帮助提高代码的可测试性吗?
发布于 2011-01-19 19:49:25
从可测试性的角度来看,全局变量和单例是如此相似,以至于它们不必分开处理。好的OO设计应该像乐高积木一样,拼凑在一起创造出最终的系统。全局变量的主要问题是你会失去隔离。当您使用全局或单例访问您的协作者时,这些类不再是单独的砖块,您可以轻松地获取和重新组织、隔离使用或在另一个项目中重用。当你使用一些依赖于全局变量的类时,你拖拽了设计的其余部分。在测试中,这会产生问题,因为您必须采取额外的步骤来切断从您的类到其合作者的连接,以便您可以单独测试它。(我在我的博客上写了more about this。)
这个问题的一个很好的解决方案是从外部提供类依赖关系。您只需引入某种机制(可能是一个简单的类),它将获取所有独立的积木,并将它们连接到组成应用程序的对象图中。这就是控制反转和依赖注入的全部内容。
发布于 2011-01-19 19:42:35
发布于 2011-01-19 19:41:45
没有不同的全局状态。要么是全局状态,要么不是全局状态。Singleton反模式只是消除了各种初始化难题,但它与全局变量相同。
如何避免全局状态?创建一些本地状态,并传递一个指向它的引用或指针。在绝大多数情况下,全局状态是不必要的。有一些必要的全局状态的实例,比如堆,但它们非常罕见,如果您需要询问,那么您几乎肯定不知道它是否正确。
https://stackoverflow.com/questions/4734735
复制相似问题