我正在创建一个小型的阿维达风格的生活模拟。我从一个非常基本的,全局的600行程序开始,在一个文件中测试一些想法,现在我想创建一个真正的设计。
除此之外,我有一个全局配置对象,其他函数都可以从中得到一些东西。现在,我必须本地化对象并传递指针。问题是,几乎每个人都需要这个东西。我想到了三个可能的解决方案:
-
a)保留配置对象全局的(最简单的,但不是真正的解决方案)
-
b)在指针所在的任何地方存储指针需要(很容易,但很浪费)记忆,自有些小普通的旧数据结构需要)。
-
c)为POD类型创建工厂需要有选择的权限,并且已经有了工厂执行所有的操作他们。
在我的想法中,只有(c)听起来合乎逻辑,但我不想不必要地使结构复杂化。你们会怎么做?
我可以接受新的想法,并且会提供任何你想知道的关于这个项目的信息。
提前感谢!
我不得不同意@Carl Norum的观点:你现在的全局配置设置没有任何问题。你说每个人都"有所收获"。正如您所知,当每个人都将写入全局变量时,全局变量的问题就出现了。在您的示例中,配置信息确实是全局需要的,因此应该将设置为 global。
如果你想让它更解耦和受保护——少一点全局化——那么为什么不添加一些读/写访问例程呢?
你看,到处存储指针并不能真正解决问题:它只会增加一个间接层,仅仅是伪装或伪装,实际上,全局访问让你感到紧张。这个额外的间接层会给juuuuust增加足够的空间,让juuuuust一个很小的小虫子爬进来。
所以,底线是:如果东西自然是全局的,那么让成为全局的,不要担心通常普遍接受的智慧,这些智慧大部分是正确的,但在你的应用程序中可能不是正确的。在我看来,总是被CS老师的规则/宣传所束缚是愚蠢一致性的完美例子。全局变量太棒了。把你的时间花在真正完成工作上,而不是毫无理由地进行重构。我工作过的每个公司都大量使用。
问问你自己,如果你把它移动到一个到处传递的对象上,你是否真的得到了什么。不妨省去额外的复杂性…
选择B,除非分析证明它是一个问题。在大多数机器上,存储指针所需的内存非常非常小。