小编典典

保留适合枚举的数据

java

大多数项目的某些数据在版本之间基本上是静态的,并且非常适合用作枚举,例如状态,事务类型,错误代码等。例如,我只使用一个通用的状态枚举:

public enum Status {
    ACTIVE(10, "Active");
    EXPIRED(11, "Expired");
    /* other statuses... */

    /* constructors, getters, etc. */
}

我想知道其他人在处理此类数据方面的持久性。我看到一些选择,每个选择都有明显的优点和缺点:

  • 将可能的状态保留在状态表中,并保留所有可能的状态域对象,以供在整个应用程序中使用
  • 只使用一个枚举,而不保留可用状态列表,这在我和我的DBA之间造成了数据一致性的圣战
  • 保持状态并在代码中维护一个枚举,但不要将它们捆绑在一起,从而创建重复的数据

我的选择是第二种选择,尽管我的DBA声称我们的最终用户可能希望访问原始数据以生成报告,并且不保留状态将导致数据模型不完整(反参数:这可以通过文档解决)。 。

大多数人在这里使用惯例吗?人们对每种事物的体验是什么,还有其他选择吗?

编辑:

考虑了一会儿之后,我真正的持久性奋斗在于处理与数据库状态相关的id值。这些值将在安装应用程序时作为默认数据插入。此时,它们将具有可在其他表中用作外键的ID。我觉得我的代码需要了解这些ID,以便可以轻松检索状态对象并将其分配给其他对象。我该怎么办?我可以添加另一个字段,例如“代码”,以查找内容,或者仅按名称查找状态,这很麻烦。


阅读 264

收藏
2020-09-24

共1个答案

小编典典

我们使用一些显式的字符串或字符值在数据库中存储枚举值。然后,从数据库值返回到枚举,我们在枚举类上编写了一个静态方法以进行迭代并找到合适的方法。

如果期望很多枚举值,则可以创建一个静态映射HashMap<String,MyEnum>来快速转换。

不要存储实际的枚举名称(在您的示例中为“ ACTIVE”),因为开发人员很容易将其重构。

2020-09-24