日常开发规范
一.git提交规范
开发代码之前,需有管理员通过系统新建功能分支,如feature/one,
此时开发人员方可拉取feature/one到本地进行开发,
开发人员在本地环境测试稳定后,方可由管理员通过系统发布到开发环境,系统自动合并到release/dev分支,
开发人员在开发环境测试稳定后,方可由管理员通过系统发布到测试环境,系统自动合并到release/test分支,
测试人员在测试环境测试稳定后,方可由管理员通过系统发布到稳定环境,系统自动合并到master;
在后续上线过程中,如果出现bug或新增问题,再管理员根据master分支新增新功能分支,如feature/two,重复以上流程
二.设计规范
一般模块设计或子系统设计应遵循需求分析-概要设计(主要包括用例图、流程图)-详细设计(主要包括活动图、时序图、数据库设计、接口设计、类图等)三大部分进行设计
三.代码规范
后端技术栈为springboot+mybatis,整体倡导除logback“零”xml配置,全注解进行使用,集成分页组件和swagger-ui,具体可参考后端代码模板,git地址: https://gitee.com/zwxu/backend-template
3.1代码风格规范
a.代码命名有意义
参考网站CODELF
b.代码需格式化
c.统一代码风格
层级名称 | 描述 |
controller层 | bean为vo (相对阿里巴巴分层,没有TService即rpc服务) |
service层(包含dao层和第三方服务封装) | bean为vo/dto (相对阿里巴巴分层,Service更重,承担Manager层职责) |
dao层 | bean为dto |
注:每层都应该模块化,遵循单一职责原则,并按模块命名,除controller层外,都需要遵循开放闭合原则,面向接口编程;每层对应bean字段需有明确意义
d.统一返回
@PostMapping("/getInfo")
public ResponseEntity<Result> getInfo() {
return ResponseEntity.ok(Result.success(null));
}
e.统一加代码注释
f.统一使用@Slf4j加日志
g.统一@lombok取代set/get等方法
h.统一每个模块都需要有对应单元测试类
i.统一常量/统一自定义异常(不要硬编码)
注:代码规范具体明细执行可参考4.公司java代码规范
j.保持方法简洁,职责单一,单个方法不能超过100行
3.2.并发编码规范
a.高并发时,同步调用应该去考量锁的性能损耗。
b.对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造成死锁。
c.并发修改同一记录时,避免更新丢失,需要加锁。要么在应用层加锁,要么在缓存加锁(推荐使用),要么在数据库层使用乐观锁,使用 version 作为更新依据(不推荐适用)。
d.节省公共资源(多任务管理,线程管理)和方便并发控制时应考虑采用单例模式
3.3.日志规范
什么时候打印日志基本原则:
- 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。
- 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支
- 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程
基本格式(必须有含义/有关键信息/有参数化信息)
log.info("[模块名称] 具体动作 关键信息:{} 参数化信息:{}")
示例: log.info("【任务模块】 校验任务信息 任务id为:{} 任务信息:{}",taskId,taskReq)
注: 正常【模块名称/具体动作/参数化信息】是必选,关键信息是可选,但是大部分场景是需要关键信息串联整体流程
对于debug日志,必须判断是否为debug级别后,才进行使用,这个避免获取参数带来的开销
示例: logger.isDebugEnabled()
需日志级别进行DEBUG/INFO/WARN/ERROR分类
四.changlist规范
五.参考资料
1、阿里代码分层:
①开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行网关安全控制、流量控制等。
②终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染,JSP 渲染,移动端展示等。
③Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
④Service 层:相对具体的业务逻辑服务层。
⑤Manager 层:通用业务处理层。
它有如下特征:
- 对第三方平台封装的层,预处理返回结果及转化异常信息。
- 对 Service 层通用能力的下沉,如缓存方案、中间件通用处理。
- 与 DAO 层交互,对多个 DAO 的组合复用。
⑥DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。
2、书籍:《代码整洁之美》pdf,可参考遵循优化代码风格
链接: 百度网盘 请输入提取码 提取码: jsyh 复制这段内容后打开百度网盘手机App,操作更方便哦