1 场景
本文主要讲下java程序中对于状态数据的状态代码和状态名称如何管理的问题。
对于数据的状态,程序中,经常不会存储状态的名称,而会存储状态对应的代码。
每个java后端开发,面对数据库中的一个字段注释:
del_flag 删除状态(0:正常;1:删除;)
都会纠结一个问题,在java代码中,这个字段delFlag值对应的0和1和分别对应的含义正常、删除,写在java代码的哪个地方比较合适?
很多人认为这个对于很大的项目来说无非是个很小的事,写在哪里,无所谓,都不会影响我们的项目。讲道理,这个无法反驳。
这篇文章,让我们一起剖析下这件微不足道的小事。
在这里,我们为了方便,定义状态代码和状态名称的类型均为字符串。
2 步骤
2.1 直接使用
最简单的用法,就是直接在程序中使用状态的代码,如下。
//(1)设置删除标记为正常
record.setDelFlag("0");
......
//(2)判断删除标志
if("0".equals(record.getDelFlag())){
return "正常";
}
2.1.1 优点
项目初期管理简单,不用花费时间进行代码封装。
2.1.2 缺点
(1)项目中出现大量手写的状态代码和状态名称。代码检查工具会提示魔法值,如项目中对代码检查要求高,此部分代码无法合并主干代码。
(2)如果状态代码对应的状态名称发生了变动,全局更改起来,将是十分致命的。
(3)研发人员水平不一致,手动在代码里写状态代码和状态名称,十分容易写错。
2.2 静态常量
部分项目,会定义一个java类,将状态码定义为其中的静态常量。其中定义了项目中用到的所有状态代码。
public class StateContext{
/**
* 正常
*/
public static final String NORMAL="0";
/**
* 删除
*/
public static final String DEL="1";
//其他状态代码
......
}
静态常亮的使用方式如下:
//(1)设置删除标记为正常
record.setDelFlag(StateContext.NORMAL);
......
//(2)判断删除标志
if(StateContext.NORMAL.equals(record.getDelFlag())){
return "正常";
}
2.2.1 优点
状态代码,可以直接通过类的静态变量使用(状态名称,也可以通过类的静态变量定义)。
2.2.2 缺点
(1)需要在类中大量定义静态变量,使用时,需十分明确使用的变量的名字,勿使用成别的变量。
(2)一般只通过静态变量定义状态代码,状态名