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