SpringBoot1.2开发规范
1.2 SpringBoot开发规范
1.2.1 开发规范的作⽤
开发规范是基于某种特定的开发语⾔和架构,进⾏开发的基本原则和推荐⽅式,在开发过程中有迷惑时进⾏参照的指南。 开发规范不同于编码规则,但⼀定要包含编码规则。
编码规范有以下⼏点意义:
(1) 编码规范可以最⼤限度的提⾼团队开发的合作效率。
(2) 编码规范可以尽可能的减少⼀个软件的维护成本,并且⼏乎没有任何⼀个软件,在其整个⽣命周期中,均由最初的开发⼈员来维护
。
(3) 编码规范可以改善软件的可读性,可以让开发⼈员尽快⽽彻底地理解新的代码
(4) 规范性编码还可以让开发⼈员养成好的编码习惯,甚⾄锻炼出更加严谨的思维
本节关于开发规范的内容摘录⾃互联⽹上搜索到的经验,同时结合实际⼯作中的理解所整理,由于各个团队的开发制度或公司要求有所不同,开发规范不⼀定适⽤于所有团队,以下内容仅仅只是作为学习使⽤SpringBoot框架进⾏项⽬开发的参考。
1.2.2 代码仓库规范
1.2.2.1 公共组件
公共组件通常指Java库,提供特定问题的处理程序包。公共组件的命名规范为:
(1) 分组编号:companyname.library 固定取值
(2) 组件名称:name name根据组件名称定义
(3) 组件版本:x.y.根据组件实际版本情况定义
1.2.2.2 服务组件
服务组件通常指可以独⽴部署,运⾏,维护的服务程序包,应⽤组件的命名规范为:
(1) 分组编号:companyname.server固定取值
(2) 组件名称:name name根据组件名称定义
(3) 组件版本:x.y.根据组件实际版本情况定义
1.2.2.3 开发环境
(1) 开发环境:JDK1.8+
(2) 开发⼯具:IntelliJ IDEA 2017(安装Lombok Plugin)
(3) 构建⼯具:Maven3.x
(4) 代码管理⼯具:Git /TortoiseGit,根据公司或者组织统⼀配置管理(有得公司使⽤SVN)。
本⽂所介绍的SpringBoot⽰例都是基于以下环境制作:
开发⼯具:IDEA
可从官⽹下载www.jetbrains/idea/download/
Java
JDK版本号:1.8
Maven
Maven版本号:3.5.2
1.2.3 ⼯程结构规范
⼀个⼯程对应代码仓库中的⼀个仓库,项⽬结构是指⼀个基于Maven创建的项⽬⽬录结构。公共组件项⽬,通常会创建⼀个Maven普通项⽬。服务组件项⽬,通常会创建⼀个Maven聚合项⽬,并在聚合项⽬⽬录下创建多个继承Maven聚合项⽬的Maven模块,它们⼀起作为服务组件项⽬的组成部分。
(1) ⼯程名称
使⽤英⽂作为仓库、项⽬、项⽬根⽬录、包结构、配置⽂件、代码⽂件、组件(公共组件,服务组件)的名称。使⽤中⽂作为⽤于代码仓库描述、模块功能描述、类描述、⽅法描述等。
Maven⼯程的命名、版本以及描述信息如:
[外链图⽚转存失败,源站可能有防盗链机制,建议将图⽚保存下来直接上传(img-LMUnaBhD-1582182974029)(zone-
7.github.io/img/springboot/1.2.3.png)]
(2) 模块命名
模块名称:{项⽬名称}-{模块名称} 模块名称简洁体现职责 ,使⽤模块名字作为模块组件的名称。例如:系统管理模块名称:sys
(3) 项⽬⽬录
项⽬⽬录遵循Maven约定⽬录格式
(1) 源码⽬录指:{项⽬⽬录}/src/main/
(2) 打包定义⽬录:src/main/assembly
(3) 代码⽬录:src/main/java
(4) 资源⽬录:src/main/resources
(5) 数据库脚本归档:/db
(6) 内部依赖数据归档:/data
(7) ⽂档⽬录:src/main/docs
(8) 脚本⽬录:src/main/bin
1.2.4 编码规范
1.2.4.1 包规范
包规范⼀般包含以下部分,有的团队也在组织内部⾃定义⼀个适应于团队的包命名规范。
(1) 项⽬基本包:company.{项⽬英⽂名(较长时适当简化)}.{模块名(可选)}
(2) config:配置类
(3) startup:与服务启动相关的类
(4) client:提供客户端实现的相关类
(5) common:公共类,定义常量类,通⽤组件
(6) entity: 数据库相关的实体类 ,有得使⽤pojo
(7) model:数据模型类(参数模型,数据传输模型等) ,有的使⽤vo
(8) controller:控制层接⼝
(9) service: 服务层
(10) dao:数据库访问层
(11) util: ⼯具类
1.2.4.2 ⽇志记录
系统统⼀使⽤SLF4j接⼝
1.2.4.3 异常处理
⼀般情况下系统主要处理两类异常:
(1) 运⾏时异常:通过参数检查等⽅式避免或抛出运⾏时异常,⽇志记录
(2) 检查异常:检查异常需要捕获,处理,⽇志记录
在我们的⽰例⼯程代码⾥,我们定义了以下⼏个类别的业务异常:
(1) AddOPException:增加操作异常
(2) ConfigException:配置异常
(3) DeleteOPException:删除操作异常
(4) DuplicationException:重复异常
(5) ModifyPasswordException:修改密码异常
(6) NoResultException: 没有结果异常
(7) ParamException:参数异常
(8) RecoverOPException:覆盖异常
(9) UpdateOPException:更新异常
异常类⼀般为RuntimeException,源代代码如下所⽰:
7.ption;
7.sponse.ResponseCode;
import lombok.Data;
/**
* GlobalException
*
* @author: zone7
* @time: 2019.02.14
*/
@Data
public class GlobalException extends RuntimeException {
private ResponseCode responseCode = ResponseCode.ERROR;
public GlobalException(){
}
public GlobalException(String message){
super(message);
}
public GlobalException(String message, Throwable cause){
super(message, cause);
}
public GlobalException(Throwable cause){
super(cause);
}
protected GlobalException(String message, Throwable cause,boolean enableSuppression,boolean writableStackTrace){ super(message, cause, enableSuppression, writableStackTrace);
}
}
7.ption;
7.sponse.ResponseCode;
7.ption.GlobalException;
import lombok.Data;
/**
* ParamException
*
* @author: zone7
* @time: 2019.02.14
springboot框架的作用*/
@Data
public class ParamException extends GlobalException {
private ResponseCode responseCode = ResponseCode.ERROR_PARAM_ILLGAL;
public ParamException(String message){
super(message);
}
}
1.2.4.4 接⼝定义
(1) 原则
接⼝地址定义表明⽤意
接⼝地址定义清晰,简洁,⽆歧义
同⼀个服务组件的接⼝定义具有⼀致性
(2) 格式
控制类的顶层地址格式:/{顶层分类名},例如:/sys/user系统管理模块下⽤户管理相关的接⼝顶层地址接⼝定义使⽤Swagger的API注解说明
标注完整的请求信息,请求⽅法,请求地址,参数可选性,接⼝描述
(3) 请求⽅式
GET URL-Params
POST Form-Data
POST RequestBody(JSON格式)
POST Mulitpart
(4) 响应⽅式
统⼀的响应模型
1.2.4.5 辅助⼯具
- 字符串处理:apache common-lang3
- 时间⽇期处理:joda-time
- JSON处理:Gson,Fastjson
- 集合扩展⼯具:guava
- ⽂件和流处理:commons-io
- 编解码:commons-codec
- 建议:尽可能使⽤开源组件
1.2.4.6 代码注释
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论