请尽量减少使用全局变量来描述您的斗争

Met*_*lic 6 global-variables

我编写的大多数程序都是相对可流程化的过程,具有明确的开始和希望结束.问题本身可能很复杂,但不容易倾向于集中使用对象和事件驱动编程.通常,我只是通过各种批量的文本数据来生成不同的文本数据.偶尔我只需要创建一个类:例如,为了跟踪警告,错误和调试消息,我创建了一个带有一个实例(myErr)的类(Problems),我相信它是Singleton设计模式的一个例子.作为另一个因素,我的同事比我更老派(程序),并且不熟悉面向对象的编程,所以我不愿意创造他们无法解开的事情.

然而,我一次又一次地听到,Singleton设计模式是否真的是一种反模式,应该避免,因为全局变量是坏的.

次要函数需要传递给它们的参数很少,并且不需要知道配置(不变)或程序状态(更改) - 我同意.但是,链中间的函数(主要控制程序流)需要大量的配置变量和一些程序状态变量.我相信将十几个参数传递给一个函数是一个"解决方案",但几乎不具吸引力.当然,我可以将变量填充到单个散列/字典/关联数组中,但这似乎是作弊.

例如,连接到Active Directory以创建一个新帐户,我需要诸如管理用户名,密码,目标OU,一些默认组,域等配置变量.我将不得不通过各种方式传递这些参数甚至不使用它们的功能,只是通过链条将它们拖垮,这最终会导致实际需要它们的功能.

我至少会声明配置变量是不变的,以保护它们,但是现在我选择的语言(Python)没有提供简单的方法来做到这一点,尽管配方确实存在作为变通方法.

无数的Stack Overflow问题已经触及了为什么?不良和必要的回避,但不要经常提到与这种准宗教限制生活的技巧.你是如何解决全球变量和项目状态的问题,或者至少与之和解?你在哪里做出妥协?你的伎俩是什么,除了围绕功能的争论?

Mit*_*ers 5

我认为单身人士模式或类似情况有时间和地点.要记住的关键点是,一次又一次,当涉及使用全局/共享/静态变量以及单例模式的"错误"选择时,许多人经历了特定的恐怖.

在您的情况下,您正在谈论具体的配置.我认为使用单例样式模式访问这些配置项没有任何害处.每个应用程序都有配置,它应该位于你可以调用的位置,没有必要只是传递它,这比它帮助更复杂.

这里的关键是确保你真正需要信息只存在一次,配置是我发现使用这种模式的最好原因之一.