### Java后端开发规范

* Idea统一安装阿里Java代码开发规约插件：```Alibaba Java Coding Guidelines```，完成代码开发之后进行编码规约扫描，不允许存在红色块警告（<font color=red>```Error```</font>、<font color=red>```Blocker```</font>）
* 使用```lombok```简化掉```pojo```的```get```、```set```代码
* 表单校验统一使用```hibernate-validator```完成校验
* 业务检查判断统一使用封装好的断言工具类```AssertUtil```
* 接口的出入口日志统一由框架处理，但是业务层关键日志一定要加上。日志统一使用```logback```框架，添加```lombok```的```@Slf4j```使用
* 除了JDK工具类之外的第三方工具类都不允许直接调用，统一再次封装到```util```包中，避免第三方工具类版本升级可能会导致大面积代码修改，也方便后续工具类统一升级管理
* 所有异常通过```throws```方式统一往外抛出，除非是可以内部消化的异常，比如资源释放失败，重新释放。否则统一往外抛出异常
* Dao层统一继承```tk.mybatis的Mapper```，简化MyBatis的Mapper编写
* Service层要有接口、实现类
* Controller层统一继承```BaseController```，接口返回值类型统一使用```ResponseEntity```，返回值封装统一调用```BaseController```的```response```方法
* 方法参数尽量直观，避免使用```request```、```response```、```map```、```json```之类的复杂数据对象，建议明确好参数具体有哪些，做到一个方法只做一件事情，如果参数数量实在太多，可以使用```Java Bean```传参
* 不建议在Controller层使用entity接收前端请求的参数，避免因为数据库字段的变更导致前端也要跟着修改。目前web端允许在Controller层使用entity，但给APP端 的接口禁止这样使用，一定要重新定义VO去跟APP端传输数据。

推荐一篇文章，共同学习下：http://blog.didispace.com/cxy-wsm-zml-10/
