-2

看看这段代码:

#include <framework_i_hate.h>
int main() {
  XFile file("./my_file.xxxx", "create");
  XObject object("my_object");
  // modify the object
  object.Write();
}

尝试猜测object将被保存在哪里......是的,你猜对了。我觉得这太神奇了,我想写一些类似object.Save(file)的东西,但没有必要。显然里面有一个全局变量,它在构造函数framework_i_hate.h期间被修改。file您如何看待构造函数内部的这种副作用?

如何隐藏这种行为?

谁猜框架的奖金。

4

3 回答 3

3

非常混乱难以理解的帖子,最后的问题非常修辞。全局变量是邪恶的,还要添加什么?

于 2010-09-07T20:19:05.617 回答
2

关于这一点可以说的还不够明显:这是一个相当讨厌的副作用,因为:

  • 除非您非常了解该框架,否则由此产生的行为是出乎意料的并且根本无法预测。

  • 全局程序状态在面向对象编程中通常不是一个好主意。(事实上​​,全局状态可能从来都不是一个好主意,所以如果可以的话最好避免它。)

  • 这个框架很可能也不是线程安全的。(想想当两个并发线程都创建一个XFile对象时会发生什么,然后这些线程中的一个线程写一个XObject......它最终会被保存在哪里?)

虽然这个线程被标记为 C++ 而不是关于 .NET,但我之前曾以一种不那么严重和更理智的形式看到这种“反模式”,即使用 DB 事务范围。

于 2010-09-07T20:19:38.820 回答
1

我更愿意看到 XFile 和 XObject 之间的关系是明确的,我同意这个“魔法”被隐藏得太好了。我还质疑为什么要为对象命名,除非 API 的其他部分具有重要的名称。

全局变量被鄙视的原因有很多,这只是一个例子。

于 2010-09-07T20:24:31.653 回答