编程规约
-
一方库、二方库、三方库
- 一方库:本工程内部子项目模块依赖的库(jar 包)。
- 二方库:公司内部发布到中央仓库,可供公司内部其它应用依赖的库(jar 包)。
- 三方库:公司之外的开源库(jar 包)。
-
DO、DTO、BO、VO
- DO: 与数据表对应的实体类, xxxDO,xxx即为数据表名
- DTO: 数据传输对象,service层向外传输数据的对象, xxxDTO,xxx为业务领域相关的名称
- BO: 业务对象,由Service层输出的封装业务逻辑的对象
- VO: 显示层对象,通常是Web向模板渲染引擎层传输的对象, xxxVO,xxx一般为网页名称
-
RPC: 远程调用框架
- RPC 的方法参数和返回值必须使用包装类型
-
集合转数组
- 必须使用集合的 toArray(T[] array),传入的是类型完全一
致、长度为 0 的空数组
List<String> list = new ArrayList<>(2); list.add("guan"); list.add("bao"); String[] array = list.toArray(new String[0]);
- 必须使用集合的 toArray(T[] array),传入的是类型完全一
-
集合有序(sort)和稳定性(order)有序性是指遍历的结果是按某种比较规则依次排列的。稳定性指集合每次遍历的元素次序是一定
- ArrayList 是 order/unsort
- HashMap 是 unorder/unsort
- TreeSet 是 order/sort
-
Map 类集合 K/V 能不能存储 null 值的情况
集合类 Key Value Super 说明 Hashtable 不允许为 null 不允许为 null Dictionary 线程安全 ConcurrentHashMap 不允许为 null 不允许为 null AbstractMap 锁分段技术(JDK8:CAS) TreeMap 不允许为 null 允许为 null AbstractMap 线程不安全 HashMap 允许为 null 允许为 null AbstractMap 线程不安全 -
jdk8新特性
- 遍历Map使用Map.forEach
- 使用 Instant 代替 Date
- LocalDateTime 代替 Calendar
- DateTimeFormatter 代替 SimpleDateFormat
- Optional 类来防止 NPE 问题
-
注释
- 对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三个斜杠(///)来说明注释掉代码的理由
异常与日志
- 在调用 RPC、二方包、或动态生成类的相关方法时,捕捉异常必须使用 Throwable
类来进行拦截 - 避免重复打印日志,浪费磁盘空间,务必加 additivity = false
- 多层条件语句建议使用卫语句、策略模式、状态模式等方式重构
mysql
- 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是,0 表示否),表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除
- 任何字段如果为非负数,必须是 unsigned
- POJO 类中的任何布尔类型的变量,都不要加 is 前缀,所以,需要在设置从 is_xxx到 Xxx 的映射关系
- 表必备三字段:id, create_time, update_time,其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。create_time, update_time的类型均为 datetime 类型