【问题标题】:Best place to define variables of constant values for an Entity Bean in Java在 Java 中为实体 Bean 定义常量值变量的最佳位置
【发布时间】:2013-10-28 07:28:28
【问题描述】:

假设我有一个user (id, name, user_type, address, access_level, and_so_on) 的实体

这里有两个属性很重要,user_typeaccess_level。我们知道 user_type 和 access_level 字段中会有一个固定值,但是很难记住 1 ,2 或 3 的含义,因此我们为这些值创建常量以通过名称访问它们。比如如果 user_type 值为 1,它是一个普通用户,2 表示 CSV 用户,3 表示管理员用户,4 表示 root 用户。

通常我在同一个实体 Bean 类中定义这些常量,该实体 Bean 类包含将此值保存在数据库(或任何地方)中的字段。

public UserBean implements IBean {
 ...
/**
     * constant for user type
     */
    public static final int USER_TYPE_NORMAL = 1;
    public static final int USER_TYPE_CSV = 2;
    public static final int USER_TYPE_ADMIN = 3;
    public static final int USER_TYPE_ROOT = 4;


    /**
     * constant for Access level
     */
    public static final int ACCESS_LEVEL_SILVER = 1;
    public static final int ACCESS_LEVEL_GOLD = 2;
    public static final int ACCESS_LEVEL_DIMOND = 3;
 ...
}

所以我的问题是,定义它们的最佳位置(以及为什么)是什么? (我能想到,但你可以定义任何方法)

  1. 在与上述相同的类别中。我这样做是因为,我不需要记住任何其他内容,因为如果我知道它的用户,那么它的相关信息可以在 UserBean 类中找到,自动实体生成器工具可能会覆盖它们)。
  2. 创建一个包含所有与用户相关的常量的新类,该常量类的名称应该是什么(易于记忆/或猜测)?
  3. 为每种类型的常量创建 2 个单独的类(更多依赖项)?

【问题讨论】:

  • IMO, Enums 似乎适合您的情况(命名可能类似于 UserTypeEnumAccessLevelEnum 等)。

标签: java class design-patterns entity constants


【解决方案1】:

正如@R.J 建议的那样,最好的选择是创建一个单独的枚举:

enum UserType{
    NORMAL, CSV, ADMIN, ROOT;
}

Pro: 
  takes less space
  static types
  code completion

Contra: 
  takes a bit more memory per entity (8 bytes vs 16 bytes at x64 architecture)

其他常用的扩展选项是将这些常量定义为超类中的整数。这会给你更少的内存消耗和代码完成(至少在 IntelliJ Idea 中)。缺乏这种完成可能是不将这些常量定义为层次结构之外的整数的主要原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2015-12-26
    • 2012-06-24
    相关资源
    最近更新 更多