### Java后端开发规范 * Idea统一安装阿里Java代码开发规约插件:```Alibaba Java Coding Guidelines```,完成代码开发之后进行编码规约扫描,不允许存在红色块警告(```Error``````Blocker```) * 使用```lombok```简化掉```pojo```的```get```、```set```代码 * 表单校验统一使用```hibernate-validator```完成校验 * 业务检查判断统一使用封装好的断言工具类```AssertUtil``` * 接口的出入口日志统一由框架处理,但是业务层关键日志一定要加上。日志统一使用```logback```框架,添加```lombok```的```@Slf4j```使用 * 除了JDK工具类之外的第三方工具类都不允许直接调用,统一再次封装到```util```包中,避免第三方工具类版本升级可能会导致大面积代码修改,也方便后续工具类统一升级管理 * 所有异常通过```throws```方式统一往外抛出,除非是可以内部消化的异常,比如资源释放失败,重新释放。否则统一往外抛出异常 * Dao层统一继承```tk.mybatis的Mapper```,简化MyBatis的Mapper编写 * Service层要有接口、实现类 * Controller层统一继承```BaseController```(多数据源的继承```DsBaseController```),接口返回值类型统一使用```ResponseEntity```,返回值封装统一调用```BaseController```(多数据源的```DsBaseController```)的```response```方法 * 方法参数尽量直观,避免使用```request```、```response```、```map```、```json```之类的复杂数据对象,建议明确好参数具体有哪些,做到一个方法只做一件事情,如果参数数量实在太多,可以使用```Java Bean```传参 * 不建议在Controller层使用entity接收前端请求的参数,避免因为数据库字段的变更导致前端也要跟着修改。目前web端允许在Controller层使用entity,但给APP端 的接口禁止这样使用,一定要重新定义VO去跟APP端传输数据。 推荐一篇文章,共同学习下:http://blog.didispace.com/cxy-wsm-zml-10/ ### 补充20191210 - 代码一定要格式化 - 接口开发完成要编写单元测试 - 了解业务背景再开发,避免因为产品考虑不周到问题导致返工(拒绝口头沟通) - 发版后跟踪测试自己开发的模块功能 - git操作流程一定要清晰,不确定的操作记得复查下,gogs上面就很容易查看git操作是否正常 --- - common包的修改尽量以新增为主,过期代码记得添加过期注解@Deprecated - 不要随意捕获异常 - 数据库表的实体类entity的字段禁止使用默认值 - app接口需要版本维护,目前要求至少兼容上一个微信小程序版本的调用 - 修改数据库表记录的SQL语句一定要保证幂等性以及可回滚 - 删除数据库表记录SQL尽量逻辑删除,避免物理删除 - 给重要的业务代码添加相关业务日志,方便后续问题排查 - @ApiOperation 只能使用在Controller层的接口方法上面 - 日志打印使用log.info打印,打印内容使用占位符形式,不能使用+拼接。打印error级别日志要写成log.error("错误", e),否则日志文件看不到完整堆栈信息 - 如果有需要钉钉通知的埋点,可以使用RiskUtil.issues()方法异步发送钉钉消息 - 如果需要redis mq的可以继承PubSubConsumerContainer(发布-订阅模式)或者PushPopConsumerContainer(生产消费模式)来使用,demo在common包里面有 - 目前出入口日志可以看到的信息有:请求参数、返回值、耗时、企业号、用户ID、请求线程唯一uuid