必知不觉工作已经两年多了,技术路途中也是一直自己慢慢摸索,深夜学习突然对比公司项目数据字典这块颇有感而发。
公司的项目从我接手完善已经一年多了,从刚开始的啥都不会到慢慢的啃代码,读懂代码到后来的重写代码,重新写逻辑关系,设计表,再加上客户催的紧,一直没对代码进行设计上的梳理,都是业务功能代码的梳理修改重用。
我再这一年的开发中碰到过很多客户提出来的新需求,新建了很多表,有很多新的标识符用来判断程序的某些状态,慢慢的发现项目好像越做越累。有时候想起一个功能,感觉其中的状态千丝万缕,有种纯sevelet用针穿起来的项目的感觉(当然没有那么夸张)。今天决定梳理一下关于以后数据字典规范问题,刚好最近清闲了以后,把项目中的数据字典都重新整理一遍。
在项目开发规范中一般数据字典都要有枚举类用来存储的。jdk1.6以上多了的枚举类本身就是用来干这个的。如下所示:
package com.mmall.common;
/**
* Created by xinxuchu on 2018/10/10.
*/
public enum ResponseCode {
SUCCESS(0,"SUCCESS"),
ERROR(1,"ERROR"),
NEED_LOGIN(10,"NEED_LOGIN"),
ILLEGAL_ARGUMENT(2,"ILLEGAL_ARGUMENT");
private final int code;
private final String desc;
ResponseCode(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode(){
return code;
}
public String getDesc(){
return desc;
}
}
上面的枚举类就定义了几个常用的返回数据字典。但实际开发中开发问题往往多而琐碎,一直新建对开发人员太过麻烦。
那么,有没有一种轻量级易操作,又能达到同样效果的方法呢?
内部接口类
package com.mmall.common;
import com.google.common.collect.Sets;
import java.util.Set;
/**
* Created by xinxuchu on 2018/10/13.
*/
public class Const {
public static final String CURRENT_USER = "currentUser";
public static final String EMAIL = "email";
public static final String USERNAME = "username";
//这里原本打算使用枚举类的,但是显得过于繁重
//这里采用内部接口类这个小技巧
public interface Role{
int ROLE_CUSTOMER = 0;//普通用户
int ROLE_ADMIN = 1;//管理员
}
public interface Cart{
int CHECKED = 1;
int UN_CHECKED = 0;
}
public interface ProductListOrderBy{
//set的contains的时间复杂o1,list的时间复杂度是on
Set<String> PRICE_ASC_DESC = Sets.newHashSet("price_asc","price_desc");
}
public enum productStatusEnum{
ON_SALE(1,"在线");
private String value;
private int code;
productStatusEnum(int code,String value){
this.code = code;
this.value = value;
}
public String getValue() {
return value;
}
public int getCode() {
return code;
}
}
}
通过内部接口类这样就完美解决了,类似数据字典一样的效果,数据清晰,一目了然。