0

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

那么对于我的工作区来说,最好的设计策略是什么,记住这必须是可测试的(现在使用 RSpec,但很高兴看到替代方案)。

在阅读了一些开源项目之后,我看到了 3 种策略。我无法将其识别为“最佳实践”。

他们是:

  1. 包括singleton班级。但这有多可测试?Workspace 的全局状态会在测试之间发生变化吗?
  2. 将所有行为实现为类方法。你又如何测试这个?
  3. 将所有行为实现为模块方法。完全不确定这个!

哪个最好?还是有其他方法?

谢谢,戈登

编辑

当我开始在我的所有代码中包含“单例”模块时,我意识到我的代码是多么紧密地耦合在一起,到处都引用了这些全局实例。

所以我已经开始完全删除它们,而是将引用传递给全局实例。但是现在我正在沿着 IOC 的路线前进——通过我的构造函数传递依赖关系。

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

顺便说一句,您可能已经收集到我是 Ruby 的新手!

4

2 回答 2

0

在性能方面,单例方法是最佳选择。为了在测试期间不改变它,您可以使用模型。

于 2010-05-07T10:06:15.357 回答
0

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

如果这就是您所说的“包含单例类”,那么我很抱歉,但是“单例”这个词在 Ruby 领域被广泛使用,通常是在这种情况下

于 2010-05-07T16:40:18.387 回答