Rails 把一个巨大的 hash 放在一个类的常量里面,和作为方法放在类里面,哪个比较好

ad583255925 · 2018年07月31日 · 最后由 ThxFly 回复于 2018年07月31日 · 2086 次阅读

有一个类,专门用来提供配置的,里面有一大堆的配置,为了图方便就直接放在常量里了

class MyClass
  CONFIG = {
    config1: {
      ...
    },
    config2: {
      ...
    },
   ...
  }
end

VS

class MyClass
  def self.config1
      {
        ...
      }
  end

  def self.config2
    {
      ...
    }
  end
  ...
end

哪种会比较好一点

配置为什么不用 yaml 呢

teddyinfi 回复

有个别配置是 proc,有些需要调其他模型的,放在 YAML 里面可能不太好处理

我是 独立一张配置表,启动一次性读完丢入 redis

配置建议不要重复造轮子,来源的优先级建议 命令行参数 > 环境变量 > 配置文件

常量可以保存默认值,然后用 get(key) 方法得到最终结果

  class T
    A = {a: 1, b: 3}
    def s
      {c: 1, d: 1}
    end
  end

  T::A.object_id
=> 70307759309580
  T::A.object_id
=> 70307759309580

  t = T.new
=> #<T:0x00007fe39ba59ea8>
  t.s.object_id
=> 70307772676380
  t.s.object_id
=> 70307766481000

最好用配置文件,实在不行,从内存的角度来看,还是放在常量里好些。

early 回复

ruby 万物皆对象,常量是最专一的。

我们项目里用的是第二种,一个常量就是一个类方法。调用简单,也方便加注释和扩展

需要 登录 后方可回复, 如果你还没有账号请 注册新账号