15 KiB
Java后端开发规范
版本号 1.0.0
目录
前言
本文为公司Java后端开发的代码规范,规范分如下两级:
原则:约定至上;Keep Simple。(周志尧指定)
约定优于配置。
编程约束
命名风格
:alibaba/youku/hangzhou
:suanFen【算分】,getGTHTypeCode【获取个体户类型编码】
类命名
方法命名
变量命名
泛型
List<String> resultList = new ArrayLisy<>();
List resultList = new ArrayLisy<String>();
Map resultList = new HashMap();
代码结构
-
采用 4 个空格缩进,禁止使用 tab 字符。IDEA 设置 tab 为 4 个空格时,请勿勾选 Use tab character;(设置界面editor -> code style -> java) -
单行字符数限制不超过120个,超出需要换行; (设置界面 File -> Settings -> Code Sytle中勾选Wrap on typing选项,Right Margin为设置的字符数限制)
说明:除注释之外的方法签名、左右大括号、方法内代码、空行、回车及任何不可见字符的总行数不超过 100行。代码逻辑分清红花和绿叶,个性和共性,绿叶逻辑单独出来成为额外方法,使主干代码更加清晰;共性逻辑抽取成为共性方法,便于复用和维护。
OOP规约
说明:公有方法是类的调用者和维护者最关心的方法,首屏展示最好;保护方法虽然只是子类关心,也可能是“模板设计模式”下的核心方法;而私有方法外部一般不需要特别关心,是一个黑盒实现;因为承载的信息价值较低,所有 Service 和 DAO 的 getter/setter 方法放在类体最后。
说明:下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行 append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。
控制语句
说明:很多 if 语句内的逻辑表达式相当复杂,与、或、取反混合运算,甚至各种方法纵深调用,理解成 本非常高。如果赋值一个非常好理解的布尔变量名字,则是件令人赏心悦目的事情。
说明:赋值点类似于人体的穴位,对于代码的理解至关重要,所以赋值语句需要清晰地单独成为一行。
注释规范
说明:在 IDE 编辑窗口中,Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释;在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。
-
所有的抽象方法 ( 包括接口中的方法 ) 必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。 -
对于注释的要求:第一、能够准确反映设计思想和代码逻辑 ; 第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路 ; 注释也是给继任者看的,使其能够快速接替自己的工作。
系统分层规范
controller层
service层
a)获取单个对象的方法用get作前缀。
b)获取多个对象的方法用list作前缀。
c)获取统计值的方法用count作前缀。
d)插入的方法用save作前缀。
e)删除的方法用remove作前缀。
f)修改的方法用modify/update作前缀。
Dao/Mapper层
a)获取单个对象的方法用select作前缀。
b)获取多个对象的方法用select作前缀,List作后续,如:selectXxxList。
c)获取统计值的方法用count作前缀。
d)插入的方法用insert作前缀。
e)删除的方法用delete作前缀。
f)修改的方法用update作前缀。
接口管理规范
异常处理规范
异常处理
异常类型主要有业务异常和应用系统异常两类:
- 业务异常,由业务编码人员在ResultCode预先定义,根据业务逻辑进行设定,视作正常的功能返回(HTTP Status Code 200 OK);
- 业务系统异常,影响业务正常运转的异常,均视为系统功能性异常。
异常处理原则
异常处理,总的原则是所有出现的异常必须要有处理;
- 所有业务异常,前端必须要有相应的响应;
- 所有的系统异常,后端必须要有日志记录与统一结果返回。
异常处理的编码规范
- 后端编码不要捕获任何异常
不要在业务代码中编写捕获异常的代码, 即 dao、service、controller 层的所有的异常都全部抛出到上层; 业务代码中只处理正确的功能, 不对异常做任何判断,后端切忌通过异常类型、或者异常出现与否来决定业务逻辑; - 后端统一处理异常
业务代码中不捕获异常, 系统所有异常都会抛出到 Controller 层,系统基础框架会统一拦截,由日志框架记录异常栈的信息,并统一返回标准的结果信息RestResult; - 前端统一处理
前端组件对后端返回结果集进行统一处理,对不同类型的异常进行相应业务逻辑的处理;
日志规约
<logger name="com.chinaweal.dao" level="debug" additivity="false"/>

