我在这里看到了一些有关处理和持久保存枚举式值的最佳方法的问题/讨论(例如,持久化适用于枚举的数据,如何使用NHibernate来持久化枚举),我想问一下一般共识是什么。
特别是:
注意:我已将本问题中最初包含的解释移至答案。
我试图总结我的理解。 如果有任何更正,请随时进行编辑。因此,它去了:
在代码中
在代码中,应该使用语言的本机枚举类型(至少在Java和C#中)或使用诸如“ typesafe枚举模式”之类的枚举来处理枚举。不推荐使用普通常量(整数或类似常量),因为这样会丢失类型安全性(并使您难以理解哪些值是合法输入的值,例如方法)。
两者之间的选择取决于要附加给枚举的附加功能:
特别是,至少在Java中,一个枚举不能从另一个类继承,因此,如果有多个具有相似行为的枚举要放入超类中,则不能使用Java的枚举。
持久枚举
若要持久枚举,应为每个枚举值分配一个唯一的ID。可以是整数,也可以是短字符串。首选短字符串,因为它可以助记(使DBA等更容易理解db中的原始数据)。
这种方法的一个问题是合法枚举值的列表存在于两个位置(代码和数据库)。这很难避免,因此通常被认为可以接受,但是有两种选择: