Ruby 类方法或常量,最佳实践

Posted

技术标签:

【中文标题】Ruby 类方法或常量,最佳实践【英文标题】:Ruby Class method or Constant, best practice 【发布时间】:2011-12-16 02:14:19 【问题描述】:

我的一个 ruby​​ 类从一个相当大的本地 XML 文件中提取数据,该文件只会随着新的部署而改变。

在这种情况下,将文档保持为常量是最佳做法,例如:

class Product 
  XML_DOC = Nokogiri::XML(open("#Rails.root/myxmlfile.xml"))
end

或通过类方法访问文档,如:

class Product 
 self.xml_doc
    Nokogiri::XML(open("#Rails.root/myxmlfile.xml"))
  end
end

我认为类方法可能是要走的路,因为它会更容易在测试中模拟,但是保存这样的内存文件的最佳实践是什么?

【问题讨论】:

我喜欢 gioele 对您的具体问题的回答,但我不喜欢您的问题。 :-) 而是将产品对象实例化为程序设置的一部分。 “我只需要一个”并不是放弃面向对象的好理由。 【参考方案1】:

这是最常见的成语:

class Product 
    def xml_doc
       @@xml_doc ||= Nokogiri::XML(open("#Rails.root/myxmlfile.xml"))
       return @@xml_doc
    end
end

||= 运算符表示“如果变量是nil,则计算表达式的结果并存储它,否则什么也不做”。这个成语叫做“memoization”。

不要将常量视为优化代码的一种方式,在 Ruby 中它们并不是真正的常量。

【讨论】:

你可以用return去掉第二行,不需要。 根据您的 Ruby 实现,隐式返回实际上可能更快。

以上是关于Ruby 类方法或常量,最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中维护常量的最佳实践

在 laravel 中添加常量的最佳实践是啥? (长名单)

在 Ruby/Rails 中隔离数据访问层的最佳实践

指定常量哈希映射时的 Rust 最佳实践 [重复]

使用常量数据反应最佳实践

常量表设计 MySQL 最佳实践