跨应用的共享常量,通常是client..jar中的constant目录下。
单个方法的总行数不超过80行;
一行不超过120个字符,超过就换行,第二行缩进4个字符;
禁止使用类对象去访问静态变量或方法,使用类名来访问,节约解析成本;
外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用产生方法影响。接口过时时必须加@Deprecated注解,并清晰的说明采用的新接口或新服务是什么;
所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。
构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中;
使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无 内容的检查,否则会有抛 IndexOutOfBoundsException 的风险。
类成员与方法访问控制从严:
1) 如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
2) 工具类不允许有 public 或 default 构造方法。
3) 类非 static 成员变量并且与子类共享,必须是 protected。
4) 类非 static 成员变量并且仅在本类使用,必须是 private。
5) 类 static 成员变量如果仅在本类使用,必须是 private。
6) 若是 static 成员变量,必须考虑是否为 final。
7) 类成员方法只供类内部调用,必须是 private。
8) 类成员方法只对继承类公开,那么限制为 protected。
线程资源必须通过线程池提供,不允许在应用中自行显式创建线程;
SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static,必须加锁,或者使用 DateUtils 工具类。
如果是 JDK8 的应用,可以使用 Instant 代替 Date,LocalDateTime 代替 Calendar, DateTimeFormatter 代替 SimpleDateFormat
少用 if-else 方式;
远程调用返回对象时,一律要求进行空指针判断,防止 NPE;
使用 JDK8 的 Optional 类来防止 NPE 问题;
对于公司外的 http/api 开放接口必须 使用“错误码”;而应用内部推荐异常抛出;跨应用间 RPC 调用优先考虑使用 Result 方式,封 装 isSuccess()方法、“错误码”、“错误简短信息”;
可以使用 warn 日志级别来记录用户输入参数错误的情况;
error 级别只记录系统逻辑出错、异常等重要的错误信息;
表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是,0 表示否)。
主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。
小数类型为 decimal,禁止使用 float 和 double。
表必备三字段:id, gmt_create, gmt_modified。其中 id 必为主键,类型为 unsigned bigint、单表时自增、步长为 1。gmt_create, gmt_modified 的类型均为 date_time 类型,前者现在时表示主动创建,后者过去分词表示被 动更新。
表的命名最好是加上“业务名称_表的作用”;
库名与应用名称尽量一致。
单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表;
in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控 制在 1000 个之内;
POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行 字段与属性之间的映射。
sql.xml 配置参数使用:#{},#param# 不要使用${} 此种方式容易出现 SQL 注入。