Nemo

Nemo 关注TA

路漫漫其修远兮,吾将上下而求索。

Nemo

Nemo

关注TA

路漫漫其修远兮,吾将上下而求索。

  •  普罗旺斯
  • 负责帅就完事了
  • 写了1,496,113字

该文章投稿至Nemo社区   Java  板块 复制链接


常用JAVA编码规范说明

发布于 2017/05/26 10:59 3,134浏览 0回复 2,285

DAO,最小的数据库表操作单元,避免写很复杂的jon子查询

  1. 业务流程处理,原则上不允许使用存储过程,因为调试维护复杂度增加,如果你要写,请提供信服的理由
  2. 自定义的数据操作类以Dao结尾,继承于mybatis生成的mapper类, 自定义model, 以xxBean结束
  3. mybatis传参规则 参数个数 <=3 使用mybatis方法参数注解 String checkPhoneisExist(@Param("phone") String phone, @Param("coordinatorId") String coordinatorId); 参数个数>3 要使用自定义的POJO类,禁止使用MAP来传参,提高代码的可读性List <coordinator> selectCoordinatorListByParams(CoordinatorQueryBean qryBean);
  4. 自定义mybatis映射文件xxxDao.xml 使用组合方式来定义结果集,优先使用此方式,看下面例子代码 使用继承方式定义resultMap, 要继承生成的resultMap,id要和类型同名,禁止这种名:BaseResultMap,下面例子代码 文件的sql要写注释,说明此条sql的业务目的 自定义sql片段的id命名要明确含义,禁止:Base_Column_List mybatis动态sql写法规范,禁止 where 1=1 and xxx此类写法,写法请参看数据库设计规范

  1. 1. 组合方式定义结果集resultmap,优先于继承方式
  2. 一对一的组合方式
  3. 2. 继承方式定义结果集resultmap:观察 id, extends的写法
  4. <resultMap id="sysUserBean" type="com.nemo.model.sys.SysUserBean" extends="com.nemo.dao.SysUserMapper.BaseResultMap">

Service业务逻辑处理,责任要明确,代码要高内聚,代码框架设计

service层要使用事务的方法要以insert, update, delete 开头,当方法执行发生运行时异常,spring事务代理才能正常工作
每个业务类只负责一个功能,总行数要在300行上下,每个业务方法在30行上下, 
如果超标,考虑功代码重构拆分,不怕文件多,只怕类太大,方法太长,后人看不懂里面的业务逻辑,
同类业务只能使用其自己的DAO,禁止使用别其它DAO,只能通过service方式调用, 
如贷款信息包含有贷款人的信息,贷款的service只能使用借款人的service取信息,禁止直接使用借款人DAO查
定义service方式必须要声明抛出检查异常, f() throw OmegaException
抛出的异常要定义明确的错误码与错误描述
代码禁止e.printStackTrace();
耗时业务如果使用异常方式,要记录失败,并提供失败补偿能力
必须要写单元测试

Controller不进行任何业务逻辑处理,主要责任是接收前端请求,并转发到后台服务处理,响应用户

一个方法代码最多在20行左右,业务逻辑代码要下沉到service
使用swagger定义接口描述
mapping url 名字要和方法名一样,有明确描述自身功能,禁止/list,ajaxlist之类命名
方法要指明支持的方法:POST GET
记录入口参数日志

日志规范

原则上所有方法都要记录日志,除非有信服理由,禁止裸奔
日志工具使用slf4j, 日志器变量名统一小写log, 
如:private Logger log = LoggerFactory.getLogger(LoanDeductPointController.class);
记录日志代码风格:log.debug("贷款ID ={}, 扣分列表项ID={}", loanId, deductPointPkList); 
禁止使用字符串拼接log.debug("贷款ID =" + loanId + ", 扣分列表项ID= deductPointPkList ");
生产环境日志统一使用INFO级别
方法入口日志,出口日志使用INFO级别
业务逻辑代码日志基本使用DEBUG
异常日志使用ERROR

接入第三方服务规范

禁止在业务模块直接调用第三方服务接口,要按第三方服务类别归类,创建独立的代理系统提供能力给业务系统使用
如使用异步事件处理方式,必须记录失败信息,关键业务要邮件通知运维,并要提供失败补偿能力

枚举类定义

属性名称+ Enums 后缀,例如:XXXEnums,TradeTypeEnums, 都应该有一个code属性,用来表示实际的值或者存到数据库,不用name(),
是否类型的枚举值,统一使用:YNEnums,值为Y或N,对应数据库类型用tinyint(1),
数据库中有固定类型值的都应该用Enum, 对应新建java的XXXEnums.

工具类定义

工具名称+ Utils 后缀,例如:CommUtils、MoneyUtils

Reids Key命名规则

因为redis主要是做数据缓存,所以key的命名规则有两种:第一种是对应数据库数据缓存,使用第一种方式,其它使用第二种方式

方式一表名:列主键:列名
方式二模块名:业务功能:列名
本文标签
 {{tag}}
点了个评