当前位置: 首页 > 面试题库 >

保留适合枚举的数据

公羊安怡
2023-03-14
问题内容

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

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

    /* constructors, getters, etc. */
}

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

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

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

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

编辑:

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


问题答案:

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

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

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



 类似资料:
  • 问题内容: 有没有办法使用NHibernate将枚举持久化到数据库?那有一张代码表和枚举中每个值的名称。 我想保留没有实体的枚举,但仍然具有从所有其他引用实体到枚举的表的外键(枚举的int表示形式)。 问题答案: 你们为什么把这个复杂化呢?真的很简单。 映射如下所示: 该模型属性如下所示: 枚举看起来像这样: NHibernate将自动解决所有问题。为什么键入比您需要的更多???

  • 问题内容: 枚举大小写是否可以使用保留关键字? 例如: 在其他语言中,这可以通过以某种方式转义关键字来实现,例如在scala中,我们使用反引号,例如 尽管是保留关键字,但仍可以用作标识符。 迅速有类似的东西吗? 问题答案: 从《 Swift语言指南》(“ 命名常量和变量”部分) 如果需要为常量或变量提供与保留的Swift关键字相同的名称,则在使用该关键字作为名称时,请在关键字前后加上反斜线(`)。

  • 问题内容: 我在这里看到了一些有关处理和持久保存枚举式值的最佳方法的问题/讨论(例如,持久化适用于枚举的数据,如何使用NHibernate来持久化枚举),我想问一下一般共识是什么。 特别是: 这些值应如何在代码中处理? 应该如何将它们持久保存到数据库中(作为文本/作为数字)? 不同解决方案的权衡是什么? 注意:我已将本问题中最初包含的解释移至答案。 问题答案: 我试图总结我的理解。 如果有任何更正

  • 问题内容: 我正在开发一个以java jar形式分发的库,并且在proguard上运行proguard的方式是仅保留所需的接口。我有一堆成员变量和一些枚举定义的配置类。我的proguard脚本可以很好地保留成员变量,但是混淆了枚举定义。我已经尝试过一切想使Proguard保留这些内部定义的公共枚举的方法,但是我无法使其正常工作。 现在我正在使用: 如果我尝试: 我收到一个模棱两可的错误:“注意:配

  • 问题内容: 这不是卡住我的问题,而是我正在寻找一种编写代码的整洁方法。 本质上,我正在编写一个事件驱动的应用程序。用户触发一个事件,该事件被发送到适当的对象,然后这些对象处理事件。现在,我正在编写偶数处理程序方法,并且希望使用switch语句确定如何处理事件。现在,在我研究通用结构时,事件类非常简单: 然后,在另一堂课中,我会看到类似以下内容的内容: 我会 喜欢 做的就是这样的事情(尽管我当然会坚

  • 问题内容: 将枚举保存到数据库中的最佳方法是什么? 我知道Java提供和方法来枚举值转换为字符串和背部。但是还有其他(灵活的)选项来存储这些值吗? 有没有一种聪明的方法可以使枚举成为唯一的数字(使用不安全)? 更新: 感谢您提供的所有出色且快速的答案!就像我怀疑的那样。 但是要注意“工具包”;那是一种方式。问题是我必须向创建的每个Enum类型添加相同的方法。那就是很多重复的代码,并且目前Java不