对于有多种状态值的字段,其状态值该如何管理

问题: 对于有多种状态值的字段,其状态值该如何管理。

举例: 比如用户的状态(user_status)包括:1(已注册未激活),2(已激活),3(已锁定),4(已注销)
在数据库里,会保存其对应的索引值(key) 1,2,3,4,
那么就需要有一个字典表,保存其对应的value(已注册未激活, 已激活, 已锁定, 已注销)

在一次前后台交互的过程中,除了返回给前端的用户信息外,还会把字典信息一并返回给前端,方便前端处理。

但是考虑下面一种情景

用户注册接口,新注册的用户默认状态为,已注册,未激活。

user.setUserStatus(1);

但是,如果后台数据库的索引值变化了,已注册未激活的索引值变为了5,那么这个时候,就需要修改代码逻辑。如果涉及多段类似代码的修改,会很容易造成错误。

请问: 如何设计后台代码对这些字典信息的管理以及如何设计数据库字典表?

阅读 4.3k
3 个回答

首先这个数字是自定义的,已注册未激活等于1还是等于5是没有意义的,数据库层面来说这两个没有太大关系.如果你的系统过于复杂,你可以做一个字典表(表里面id就是你的status,status_name就是你的已注册未激活),然后设计一个用户字典树关联表,真的需求出现的时候, 你可以通过一个sql去批量更新.不过话说回来,大部分改数字的情况都是需求不合理或者设计不合理导致的.

可以考虑使用枚举将各个状态和值相关联,使用时就可以 user.setUserStatus(UserStatus.LOCKED)之类的方式来尽可能的减少代码改动的范围。 eg.

 public enum UserStatus {

    LOCKED(3); // other similar

    public final Byte code;

    private UserStatus(int code) {
        this.code = (byte)code;
    }
}

不过这样做时需要注意的是数据库中已存的用户状态需要通过 sql 语句手动更新。(虽然这种需求本身就不是很合理)

谁说要用字典表?像这种情况直接用枚举。枚举底层存的数字,上层直接读取值。
另外索引值怎么会变化呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题