乾道核心等系统后台开发Service编码规范
1、编码说明
1)架设计之初,优先考虑降低开发成本;于是,去掉了实体类接口dao的实现类;所以,sql语句的拼写调整至service层。
2)service层中的方法,凡是调用dao层带有@Modifying注解的方法,必须加@Transactional,且增加属性rollbackFor=Exception.class
即 @Transactional(rollbackFor = Throwable.class)
凡是要求一致性的业务操作集合,需要事务管理的,也需要增加以上注解。
3)删除不需要的引用,避免引用的类被优化掉报错。idea快捷键:Ctrl+Alt+O
4)整理代码格式,idea快捷键:Ctrl+Alt+L;自写代码部分整理,避免整个体优化,代码合并冲突。
2、日志打印
1)http请求和响应参数打印,系统有统一的过滤器,在执行调用结束返给前端前系统打印请求参数和响应参数以及耗时信息;当发生异常,系统全局异常处理机制,捕获和打印异常信息,以及打印请求入参
2)必要信息打印,比如调用方法返回结果打印;
业务用关键点,要有明确的文字说明,**业务,**操作,**执行结果等必要信息
3)执行至关键步骤打印,比如短息、邮件、推送消息、推送消息至rocketMq等;
方便问题排查
4) 可能发生异常的地方,打印日志;
5)分多步执行,每一步加日志打印;特别首次上线!
6)不同情况下,程序走不同逻辑分支点,打印日志;if else if .. else;switch case;
7)查询sql及参数打印;
目的:方便后期排查问题。
3、方法编写
1)方法体小而精:按照业务模块,进行划分;按照不同操作,再次细化;每个方法尽量控制在100行以内。
2)必要情况开启事务管理:考虑“原子性,一致性,隔离性,持久性“”,所有操作置于同一方法中,并使用@Transactional开启事务管理;
3)简化程序实现逻辑;
4)程序没必要往下执行做return;
避免if else if else 嵌套太多,或者避免使用else,让改代码看起来逻辑上很简单
5)业务实现代码写在service层,controller层仅作必要的参数校验,结果转换实体->vo;多次调用的情况下载ctr层提取一个单独的转vo的私有方法。
目的:每个方法都是一个小的执行单元,实现单一功能。
4、封装后的service层代码
BaseService<T>
2、BaseServiceImpl<T>,BaseService<T>的实现类
此处忽略
问题考虑:能否去掉BaseServiceImpl<T>,BaseService<T>两个泛型类