我只是在观看 Aloha on Rails 上一个名为“你做错了”的会议的预览。
在简短的预览中,他提到使用 ActiveRecord 模型作为枚举(我假设他的意思是像enumerate_by这样的插件)。这对我来说似乎是合理的想法,有什么问题?它只是附加对象所需的开销吗?
谢谢
我只是在观看 Aloha on Rails 上一个名为“你做错了”的会议的预览。
在简短的预览中,他提到使用 ActiveRecord 模型作为枚举(我假设他的意思是像enumerate_by这样的插件)。这对我来说似乎是合理的想法,有什么问题?它只是附加对象所需的开销吗?
谢谢
他的演讲有点夸张和惯用语。不过,他的观点是正确的。
将静态数据放入数据库需要开发开销:您需要确保所有迁移都在所有环境中运行(包括每次 db:test:clone 时),每次都需要加载数据使用您的代码(例如,即使在 irb 中),您可能会遇到加载顺序问题。简而言之,它不是免费的,我们不想产生不必要的开发和支持成本。
但是,这样做可能有好处。数据可能希望在用不同语言编写的代码之间共享;代码可能很复杂,并且在每次部署之前都需要昂贵的测试周期;您可能希望为数据创建数据库约束;您可能希望将大量或结构化的元数据与枚举相关联;等等。
不过,这些情况并不常见。对于大多数枚举,命名常量、哈希,甚至只是使用符号的约定就足够了。
正如他所说,关于静态枚举,他遇到了问题。为什么要对一些可以存储在命名常量中的静态数据进行数据库查询?
此外,一些开发人员为未来编写代码。它是关于对现在的需求进行编码,同时保持设计对修改关闭和对扩展开放,如果将来需要扩展的话。否则,您将花费时间、精力并最终将金钱花在客户并未真正要求拥有的东西上。可扩展设计是一回事,而针对未来需求的设计则是另一回事。虽然如果需要可以将前一个扩展至后一个,但此时实际上并不需要后一个。