为什么使用模型作为枚举是不好的?

时间:2009-10-08 03:58:31

标签: ruby-on-rails activerecord ruby-on-rails-plugins

我只是在Aloha on Rails上观看一个名为“You're Doing it Wrong”的会话预览。

在简短的预览中,他提到使用ActiveRecord模型作为枚举(我假设他的意思是像enumerate_by这样的插件)。这对我来说似乎是合理的想法,有什么问题?它只是附加对象所需的开销吗?

由于

2 个答案:

答案 0 :(得分:1)

他的演讲中有点夸张和惯用。不过,他的观点是合理的。

将静态数据放入数据库存在开发开销:您需要确保所有迁移都在所有环境中运行(包括每次db:test:clone),您需要加载数据每次使用代码时(例如,甚至在irb中),您都可能遇到加载顺序问题。简而言之,它不是免费的,我们不希望产生不必要的开发和支持成本。

然而,这样做可能会有好处。可能希望在用不同语言编写的代码之间共享数据;代码可能很复杂,在每次部署之前都需要昂贵的测试周期;您可能想要创建数据库约束数据;您可能希望与枚举关联的广泛或结构化元数据;等等。

但这些情况并不常见。对于大多数枚举,命名常量,散列,甚至只是使用符号的约定就足够了。

答案 1 :(得分:0)

正如他所说,关于静态枚举他有问题。为什么要对可以存储在命名常量中的某些静态数据进行数据库查询?

此外,一些开发人员为未来编写代码。它是关于现在的要求编码,同时保持设计关闭以进行修改并开放扩展,如果所有要求在未来扩展的话。否则,你会花费时间,精力和最终的金钱在客户没有真正要求的东西上。可扩展设计是一回事,未来需求的设计是另一回事。虽然前一个可以扩展到后一个,如果需要的话,以后不需要在这个时间点。