2021-12-20 16:30:26 +08:00
|
|
|
|
# Java后端开发规范
|
|
|
|
|
|
|
|
|
|
|
|
> 拟稿:[黎润豪](/lirh)<a href="https://blog.lroyia.top" target="_blank">(个人博客)</a>
|
|
|
|
|
|
>
|
2021-12-22 11:04:24 +08:00
|
|
|
|
> <div><span>版本号 1.0.0 </span></div>
|
2021-12-20 16:30:26 +08:00
|
|
|
|
>
|
2021-12-22 14:59:08 +08:00
|
|
|
|
|
|
|
|
|
|
- [Java后端开发规范](#java%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83)
|
|
|
|
|
|
- [编程约束](#%E7%BC%96%E7%A8%8B%E7%BA%A6%E6%9D%9F)
|
|
|
|
|
|
- [命名](#%E5%91%BD%E5%90%8D)
|
|
|
|
|
|
- [类命名](#%E7%B1%BB%E5%91%BD%E5%90%8D)
|
|
|
|
|
|
- [方法命名](#%E6%96%B9%E6%B3%95%E5%91%BD%E5%90%8D)
|
|
|
|
|
|
- [变量命名](#%E5%8F%98%E9%87%8F%E5%91%BD%E5%90%8D)
|
|
|
|
|
|
- [异常处理](#%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86)
|
|
|
|
|
|
- [日志规约](#%E6%97%A5%E5%BF%97%E8%A7%84%E7%BA%A6)
|
|
|
|
|
|
- [代码结构](#%E4%BB%A3%E7%A0%81%E7%BB%93%E6%9E%84)
|
|
|
|
|
|
- [工程结构](#%E5%B7%A5%E7%A8%8B%E7%BB%93%E6%9E%84)
|
|
|
|
|
|
|
|
|
|
|
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
2021-12-20 16:30:26 +08:00
|
|
|
|
## 前言
|
|
|
|
|
|
|
|
|
|
|
|
本文为公司Java后端开发的代码规范,规范分如下两级:
|
|
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  :开发者必须遵循的开发规范要求
|
|
|
|
|
|
-  :开发者选择性遵循的开发规范要求
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
|
|
|
|
|
## 编程约束
|
|
|
|
|
|
|
|
|
|
|
|
### 命名
|
|
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  杜绝完全不规范的缩写,避免望文不知义。
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
>  :AbstractClass缩写成AbsClass;condition缩写成condi;Function缩写成Fu。
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  严禁使用非全世界都知道的拼音命名。
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
>  :alibaba/youku/hangzhou
|
|
|
|
|
|
>  :suanFen【算分】,getGTHTypeCode【获取个体户类型编码】
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
|
|
|
|
|
#### 类命名
|
|
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  采用大驼峰(UpperCamelCase)命名法,禁止使用数字命名。
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
>  :KeyPair,GlobalConfig
|
|
|
|
|
|
>  :areaSlice,AreaSlice1,AreaSlice2
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  采用【名词】,【形容词+名词】的格式进行命名
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
>  :SMSSender,GlobalConfig
|
|
|
|
|
|
>  :SendSMS
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  抽象类必须以Abstract或Base开头(工具类例外:如StringUtils);异常类名明必须以Exception结尾;测试类必须以Test结尾。
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  接口的参数类必须要以VO或Dto结尾命名;接口与接口之间的传输参数传输类必须以Dto结尾命名。
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
|
|
|
|
|
#### 方法命名
|
|
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  采用小驼峰(LowerCamelCase)命名法,禁止使用拼音命名
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  方法参数不多于5个,多于5个后改用DTO进行传输。
|
2021-12-20 16:30:26 +08:00
|
|
|
|
|
2021-12-21 17:29:15 +08:00
|
|
|
|
#### 变量命名
|
|
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  常量与枚举均使用大写+下划线组合的方式命名
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
>  LIMIT_SIZE,ENTITY_TYPE
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  采用小驼峰(LowerCamelCase)命名法,禁止使用拼音命名
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  局部非循环与下标变量,不可使用单字母命名(特殊数学含义例外,如斜截式的斜率a,常数b)
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-20 16:30:26 +08:00
|
|
|
|
## 异常处理
|
|
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  方法若有显式的RuntimeException异常抛出,必须使用`throws`关键字将其标识到方法上
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  异常的打印均用日志对象的error等级输出
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  IDEA发现的空指针问题必须要处理掉
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  捕获异常和跑异常必须完全匹配,或者捕获异常是抛异常的父类
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  若异常被捕获,如果数据需要回滚,一定要注意进行手动回滚
|
2021-12-22 11:00:26 +08:00
|
|
|
|
|
|
|
|
|
|
## 日志规约
|
|
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  日志对象在项目引用了lombok的情况下,请用@SLF4J注解声明
|
2021-12-22 11:00:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  所有日志文件至少保存15天
|
2021-12-22 11:00:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  日志信息拼接使用`{}`占位符,以提高可读性和拼接性能
|
2021-12-22 11:00:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  生产环境进制直接使用`System.out`,`System.err`或`e.printStackTrace()`充当日志输出
|
2021-12-22 11:00:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  避免重复打印日志,浪费磁盘空间,务必在日志配置文件中的子logger配置additivity=false
|
2021-12-22 11:00:26 +08:00
|
|
|
|
|
|
|
|
|
|
```xml
|
|
|
|
|
|
<logger name="com.chinaweal.dao" level="debug" additivity="false"/>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 代码结构
|
|
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  `{}`代码块嵌套不应超过4层
|
2021-12-21 17:29:15 +08:00
|
|
|
|
|
2021-12-20 16:30:26 +08:00
|
|
|
|
## 工程结构
|
2021-12-22 11:00:26 +08:00
|
|
|
|
|
2021-12-22 11:36:05 +08:00
|
|
|
|
-  目录结构com.chinaweal.{项目简称}.{通用配置名/数据源缩写}.{controller/service/entity/mapper}
|