在Ruby中,如何实现全局行为?

时间:2010-05-07 09:56:39

标签: ruby singleton behavior

我想实现工作区的概念。这是一个全局概念 - 所有其他代码将与此Workspace的一个实例进行交互。工作区将负责维护当前系统状态(即与系统模型交互,保持系统状态等)

那么什么是我的工作区的最佳设计策略,请记住这必须是可测试的(现在使用RSpec,但很高兴看到替代品)。

通过一些开源项目阅读,我看到了3个策略。我无法确定这是“最佳做法”。

他们是:

  1. 包括singleton类。但这有多可测试?全局Workspace会在测试之间发生变化吗?
  2. 将所有行为都实现为类方法。再次如何测试?
  3. 将所有行为都视为模块方法。根本不确定这个行为!
  4. 哪个最好?或者还有另一种方式吗?

    谢谢, 戈登

    修改

    当我开始在我的所有代码中包含'singleton'模块时,我意识到我编写代码的紧密耦合,以及对这些全局实例的引用。

    所以我开始完全删除它们并将引用传递给全局实例。但现在我正沿着国际奥委会的路线前进 - 通过我的建设者传递依赖关系。

    这在Ruby中是个好主意吗?或者我错过了什么?

    顺便说一下,你可能已经聚集了我对Ruby的新手!

2 个答案:

答案 0 :(得分:0)

单身方法是最好的选择,表现明智。为了在测试期间不改变,你可以使用模拟。

答案 1 :(得分:0)

也许标准库中的Singleton module会有用吗?如果在类中包含此模块,则只能创建一个实例。然后,您可以使用实例变量来管理工作区的状态等。

如果你的意思是“包括单身人士课程”,那么我很抱歉,但是“单身人士”一词在Ruby领域被抛出相当多,通常在this context