在定义静态类而不是实例化类时,是否存在一些适用的规则?
仍然困扰于惯用的ruby初始化和静态类定义。
根据我的发现。
静态类似乎非常有效。
对我来说。主要问题是:
为了解决这两个问题,我认为静态方法(在可能的情况下)似乎给代码施加了很大的压力,要求他们遵守SOLID原则。
静态
Serializer.transform(fruit:)
实例化
Serializer.new(fruit:).transform
什么使您无法使用红宝石?
答案 0 :(得分:2)
您的意思是,您只想将类用作纯函数的名称空间。
这没什么不对,您可以以这种方式使用ruby,但是您将在许多方面与该语言背道而驰。这是一个更长的讨论。
此外,我不会将其构造为静态或实例化。您实际上是在询问纯功能还是OO方法。最后,不要将OO等同于“突变”。您可以在ruby中使用不可变值对象,我建议您使用它们。您可能需要检查dry-rb生态系统,以一种纪律严明的方法提倡纯功能概念,该方法应与ruby对对象的自然支持相协调。
答案 1 :(得分:0)
从同事[CH]复制的另一个答案。
我总是喜欢对其中一些决定进行基准测试
require 'benchmark'
class ClassMethod
def self.do_work
1_000_000 * 1_000_000
end
end
class InstanceMethod
def do_work
1_000_000 * 1_000_000
end
end
class InstanceMethodHiddenByClassMethod
def self.do_work
new.do_work
end
def do_work
1_000_000 * 1_000_000
end
end
iterations = 10_000_000
Benchmark.bm do |x|
x.report("class method") do
iterations.times do
ClassMethod.do_work
end
end
x.report("instance method") do
iterations.times do
InstanceMethod.new.do_work
end
end
x.report("class hiding instance pattern") do
iterations.times do
InstanceMethodHiddenByClassMethod.do_work
end
end
end
结果
user system total real
class method 0.520000 0.010000 0.530000 ( 0.531997)
instance method 1.130000 0.000000 1.130000 ( 1.131185)
class hiding instance pattern 1.270000 0.010000 1.280000 ( 1.282921)
答案 2 :(得分:0)
嗯。统治原则?
何时编写静态ruby类:
何时编写要初始化的ruby类:
无论如何。在我看来,团队聚在一起并概述在其依赖关系图上静态或实例化哪些重复模式是很重要的。