参考阿里巴巴Java开发手册
以下是从手册中根据自己平时开发经验提出的比较重要且容易被忽略的几点
Mysql数据库设计规约
建表约束
1、[强制]加id,bigint 自增主键
2、[强制]加create_date 和modify_date 创建时间和更新时间
3、[强制]加is_deleted 所有删除都是逻辑删除
4、[强制]is_xxx 到 类成员变量的xxx 去掉is mybatis-generator可以配置
5、[强制]表单与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint
6、[强制]主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名为idx_字段名
7、[强制]小数类型为decimal,禁止使用float和double
8、[推荐]表的命名最好遵循“业务名称_表的作用”
索引规则
1、[强制]业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引
2、[强制]超过三个表禁止用join,最好不要用join,分开查询加上缓存效果会更好
3、[强制]页面搜索严禁左模糊或者全模糊
4、[推荐]建组合索引的时候,区分度最高的在最左边 如:idx_companyId_isDeleted
ORM映射
1、[参考]@Transactional 事务不要滥用
Java编程规约
OOP规约
1、[强制]所有DO类必写toString方法,IED中可以自动生成,如果继承了另一份DO类,加上super.toString()
2、[强制]使用Objects.equals() 判断值类型(java.util.Objects#equals), 反例:object.equals(“test”)
3、[强制]BigDecimal 来保存金额等精度较高的数据,并且禁止用 == 做判断
4、[强制]所有整型包装类对象之间的值比较,全部使用equals方法比较 Integer Long等
5、[推荐]循环体内 使用StringBuilder 的append方法进行扩展
6、[强制]所有的常量名都应该大写,格式如BACKEND_URL
7、[推荐]创建constant包,把常量按照类别放入此目录下,避免一股脑放在一个类中,可读性差。
集合规约
1、[强制]不要在foreach循环中进行元素的remove/add 操作。请使用Iterator
SpringBoot
1、[强制]controller 封装统一返回类和返回状态码,如Result/ResultBean 避免使用Map,Json。
2、[强制]封装分页请求和返回基类,如BasePagingPara、BasePagingResult。
应用分层
应用分层
1、Controller/Web层:访问控制进行转发,各类基本参数校验,xxxController
2、Service层:相对具体的业务逻辑服务层,xxxService xxxServiceImpl
3、Manager层:通用业务处理层(这一层经常被忽略)
1)对第三方平台封装的层,预处理返回结果及转化异常信息
2)对Service层通用能力的下沉,如缓存方案、中间件通用处理
3)与DAO层交互,对多个DAO的组合复用