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

ad583255925 · July 31, 2018 · Last by ThxFly replied at July 31, 2018 · 2076 hits

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

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

VS

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

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

哪种会比较好一点

配置为什么不用 yaml 呢

Reply to 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

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

Reply to early

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

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

You need to Sign in before reply, if you don't have an account, please Sign up first.