如果老板希望您使用全局变量,该对老板说些什么


13

我目前有4个月的实习期,在查看我的代码时,我的老板不喜欢我在一个程序集中几个单独的类中的多个方法中保留了一个特定的对象。他不喜欢每次都创建一个新对象,而是告诉我创建一个可以从任何地方访问的对象。因此,我不得不将其创建为静态类中的静态对象,并从此处引用它以使用它!

我只从事4个月的专业编程,您将如何处理呢?


4
您的老板是技术人员还是非技术人员?如果他是技术专家,他是否阅读过Robert C. Martin的“清洁代码”?
乔治·斯托克

5
因此,您的老板雇用了您进行编码,现在正在告诉您如何编码?
Jeremy Heiler 2011年

8
您在下面的评论中说:“除了许多常量之外,对象没有任何状态”。在这种情况下,静态类对我来说似乎是一个很好的解决方案。
贾斯汀

5
“ Yes Boss”

2
“告诉我创建一个可以从任何地方访问的对象。因此,我不得不将其创建为静态对象。”这不是有效的推理。您说的好像是可以从整个应用程序访问的单个对象意味着您拥有一个Singleton -为什么不只在聚合根中创建它,然后将其引用传递给相关类?
2011年

Answers:


33

如果一个对象就足够了,那么每次创建一个对象都是浪费,在这里老板可能是对的。

问题是正确访问该对象。第一个想到的解决方案是具有适当可见性的工厂式方法,该方法始终返回该静态对象。当然也存在其他人。


3
+1:我不喜欢“ GoF这么说”的答案,对是对的。
哈维尔

1
我确实考虑过Singletons,但是我只是将其视为围绕全局变量的包装器,因此我没有进行跟进。我现在尝试一下,因为对象没有任何状态,除了很多常量之外,应该没问题。谢谢。
达伦·杨

9
我怀疑可能是这种情况(“对象没有任何状态……很多常量”)。你的老板是对的。没有必要对垃圾收集器施加人为的压力,以获取永不更改的值。
Berin Loritsch 2011年

3
@ darren-young:附带说明,没有状态很有趣,并且允许使用一些有力的方法。如果您还没有,请看一下所谓的“函数式编程”。
9000

8

我不能评论你的具体情况,但使用全局变量有时一个很好的解决方案。Java的System类充满了静态的全局变量。

但是总的来说,如果您认为自己是对的,而老板是错误的,那么为什么不要求老板解释为什么他认为全局变量是更好的解决方案呢?一个简单的“我不喜欢它”就像“全局变量是邪恶的”一样模糊。您必须向老板要求更多!

如果他不能说出自己的立场,而您可以说出自己的立场,反之亦然,那么这是一个很好的学习机会。如果你们俩都可以证明自己的立场是正当的,那么这可能是个人品味或经验的问题:您的老板一定在专业编程方面已经超过4个月了,我认为?


1
看,java.lang.System恰好包含三个全局变量,对于每个全局变量,都有一种正确设置它的方法。但是System到处都是静态方法,这些方法返回全局对象,并且这没有什么不对的,不能争辩。
9000

2
是; 我认为全局变量与返回全局对象的静态方法几乎相同。
乔纳斯

因此,Java做到了。这是否是个好主意完全是一个不同的问题。C的标准随机数生成器保持全局状态。但这通常被认为是可怕的,因此随机数生成器因此在某些应用中不可用(例如,参见Bentley等人,《工程学排序函数》)。尤其是Java,它有很多设计问题(在C#中已得到部分改善),因此我并不十分警惕将其用作这样的参数。
Konrad Rudolph

@Konrald Rudolph:最后,这是一个设计决定。每个决定都各有利弊。例如,保持全局状态可以System简化99.9%的用例,而其余的0.1%则会引起问题。没有0.1%的额外复杂性值得“正确”的答案。
乔纳斯

5

作为处于您所处位置的人,您最多可以做的就是学习。如果对象本质上是一个常量(即,它不能改变并且不保持状态),那么老板可能是对的。拥有静态常量对象没有任何危害。毕竟,PI有多少个定义?

有些人捍卫“没有全球目标”的心态,直到宗教狂热者。这是由于两个原因之一:由于过度使用全局变量/对象,他们很难跟踪bug或系统脆弱性,或者他们听说这很不好,他们无法自己思考。我个人属于遭受脆弱性和难以跟踪错误困扰的人群-但我在这里也学到了一些平衡。

如果我穿上你的鞋子,我会继续做老板说的话-毕竟这是他的屁股。然后,我会观察并观察该选择随时间的变化。这是一种有效的学习工具。


这是实习。你应该在学习。盲目做老板说的没有学习的事情。
David Thornley

5
也不会一味地与您的老板对立。正如我所写,我的建议是观察老板选择的影响。我们(在stackexchange上)无法对情况做出价值判断,因为我们缺少重要信息。这种情况下要做一些科学的方法。OP有一个假设,老板对此提出了质疑。现在该进行实验了。
Berin Loritsch 2011年

2

根据具体情况,全局变量可能是最佳解决方案。在嵌入式编程中,全局变量不占用堆栈空间,因此是一个不错的选择。

是否有全局变量,我发现在全局变量上加前缀是一个很好的实践。这将使其他程序员使用您的代码来检查代码,以免造成混乱。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.