根据Reek的说法,创建一个类变量被认为是"代码味道".这背后的解释是什么?
在java中,我会创建这样的东西:
private static MyClass instance;
public static MyClass getInstance() {
if(instance != null) {
return instance;
}
instance = new MyClass();
return instance;
}
Run Code Online (Sandbox Code Playgroud)
在 ruby 中获得相同功能的合适方法是什么?
更新:我已经阅读了关于“包含单例”的内容,但是当我尝试在 Ruby 1.9 上的 irb 中执行此操作时,我得到了:
[vertis@raven:~/workspace/test]$ ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin9.4.0]
[vertis@raven:~/workspace/test]$ irb
irb(main):001:0> class TestTest
irb(main):002:1> include Singleton
irb(main):003:1> end
NameError: uninitialized constant TestTest::Singleton
from (irb):2:in `<class:TestTest>'
from (irb):1
from /usr/local/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud) 我有一个关于Rails最佳实践的问题。在我的rails项目中,我有以下代码:
class MyController < ApplicationController
def some_method
@product = MyFabricatorClass.new.create_product
end
...
end
Run Code Online (Sandbox Code Playgroud)
MyFabricatorClass不依赖于某些状态,并且其行为是恒定的。我也在做很多C ++的工作,对我来说,总是实例化一个新的MyFabricatorClass对象似乎有点效率低下。在C ++项目中,我会适当地使用类似以下内容的东西:
class MyController < ApplicationController
@@my_fabricator = nil
def some_method
@@my_fabricator ||= MyFabricatorClass.new
@product = @@my_fabricator.create_product
end
...
end
Run Code Online (Sandbox Code Playgroud)
这种样式在Rails中也合法吗?典型的Rails方式是什么?
感谢您的任何建议...!