介绍
MESH-PLATFORM
是一个全新的软件开发框架。
参考阿里巴巴、华为的开发手册,以及其他开源项目中共享的规范,针对本项目进行归纳补充。
1:目录规范
module 目录里写项目的各个业务,每个业务一个独立的顶级文件夹。 其中,domain 包里存放 entity, dto, vo,bo 等 javabean 对象
src
| com.platform.mesh //包名
| | module
| | ├──api //远程调用接口
| | ├──controller //controller:约定当前controller 只引入当前service
| | | └──RoleController.java
| | ├──service
| | | ├──RoleService.java //service:约定当前service 只提供当前controller.api 相关接口
| | | ├──impl
| | | | └──RoleServiceImpl.java //serviceImpl:约定当前serviceImpl 只实现当前service 相关方法,所有封装转换方法在Manual中进行
| | | ├──manual
| | | └── └──RoleServiceManage.java //serviceManage:约定当前模块Manual 不引入当前模块Service,Manual是供Service引入,避免循环引入不整洁
| | ├──constants
| | | └──RoleConst.java //role相关的常量
| | ├──enums
| | | └──RoleEnum.java //role枚举
| | ├──mapper //dao
| | | ├──xml
| | | | └── mapper.xml
| | | └──mapper.java //dao
| | ├──domain //domian
| | | ├──bo //BO 内部业务对象:需集成BaseBO
| | | | └── RoleBO.java //roleBO 对象
| | | ├──dto //DTO 前端参数接收对象:需集成BaseDTO
| | | | └── RoleDTO.java //roleDTO 对象
| | | ├──po //PO 数据库ORM对象:需集成BasePO
| | | | └── RolePO.java //rolePO 对象
| | | ├──vo //VO 后端返回对象:需集成BaseVO
└── └── └── └──└── RoleVO.java //roleVO 对象
2:注释模板
- 类
/**
* @description
* @author $user$
* @company 公司
* @date $DATE$ $TIME$
* @version V1.0
*/
- 方法
**
* 功能描述:
* 〈$END$〉
$param$
* @return $return$
* @author author
* @date $DATE$ $TIME$
*/
param参数脚本
groovyScript("def result = '';def params = \"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {if(params[i] != '')result+=((i ==0) ? ' ' : '')+'* @param '+ params[i] + ' ' + params[i] + ' ' +((params.size()!=0)&&(i < params.size() - 1) ? '\\r\\n ' : '')}; return result == '' ? null : result", methodParameters())
return返回值脚本
groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split('<').toList(); for(i = 0; i < params.size(); i++) {if(i!=0){result+='<';}; def p1=params[i].split(',').toList(); for(i2 = 0; i2 < p1.size(); i2++) { def p2=p1[i2].split('\\\\.').toList(); result+=p2[p2.size()-1]; if(i2!=p1.size()-1){result+=','} } ; }; return result == 'void'?' void':' 正常返回:{@link '+result+'} / 异常返回:{@code null}'", methodReturnType())
- 变量
/**
* 变量名称
*/
3:业务规范
domain
不得有任何的业务逻辑或者计算
基本数据类型必须使用包装类型
(Integer, Double、Boolean 等)
每个属性必须添加注释,并且必须使用多行注释。
必须使用
lombok
简化getter/setter
方法建议对象使用
lombok
的@Builder ,@NoArgsConstructor
,同时使用这两个注解,简化对象构造方法以及set方法。controller
主要做业务分发,不参与业务处理,所以尽量简洁明了
使用同一结果Result包装返回
约定当前controller 只引入当前service,避免业务交叉引用,有利于业务解耦。
/**
* 功能描述:
* 〈示例功能〉
* @param demoDTO 示例请求参数
* @return 正常返回:{@link Result<DemoVO>}
* @author author
*/
@Operation(summary = "〈示例功能〉")
@PostMapping("/demo/test")
public Result<DemoVO> demo(@Valid @RequestBody DemoDTO demoDTO) {
return Result.success(demoService.demo(demoDTO));
}
service
继承Mybatisplus IService类
约定当前service 只提供当前controller/api 相关接口。
如果业务功能很多,需要拆分多个service进行业务分组,避免单个文件行数过多。
serviceImpl
继承Mybatisplus ServiceImpl类
约定当前service 只实现当前controller/api 相关接口。
约定当前serviceImpl 只实现当前service 相关方法,所有封装转换方法在Manual中进行。
serviceImpl
继承Mybatisplus ServiceImpl类
约定当前service 只提供当前controller/api 相关接口。
约定当前serviceImpl 只实现当前service 相关方法,所有封装转换方法在Manual中进行。开发过程中经常遇到一个方法逻辑复杂情况下,需要封装多个方法,使主体方法逻辑过程简单明了,造成当前serviceImpl存在很多与控制层不存在交互的方法,文件排版混乱,所以将非交互方法放入独立业务处理类,简化当前业务文件。
/**
* 约定当前serviceImpl 只实现当前service 相关方法,所有封装转换方法在Manual中进行
* @description 业务处理
* @author author
*/
@Service
public class DemoServiceImpl extends ServiceImpl<DemoMapper, Demo> implements IDemoService {
@Autowired
private DemoServiceManual demoServiceManual;
/**
* 功能描述:
* 〈获取示例详情信息〉
* @param demoId id
* @return 正常返回:{@link DemoVO}
* @author 蝉鸣
*/
@Override
public DemoVO getDemoInfo(Long demoId) {
Demo demo = this.getById(demoId);
if(ObjectUtil.isEmpty(demo)){
return null;
}
//逻辑1
demoServiceManual.func1(demo);
//逻辑2
demoServiceManual.func2(demo);
//逻辑3
demoServiceManual.func3(demo);
return demoServiceManual.getDemoInfo(demo);
}
}
serviceManual
约定当前模块Manual 不引入当前模块Service,Manual是供Service引入,避免循环引入依赖。
如果业务功能很多,需要拆分多个service进行业务分组,避免单个文件行数过多。
mapper
继承Mybatisplus BaseMapper类
约定当前mapper 只提供当前service 相关逻辑。
禁止直接在 mybatis xml 中写死常量,应从 dao 中传入到 xml 中
禁止使用
$
造成SQL注入的情况尽量避免在SQL进行复杂逻辑计算
方法名称需要见文知意
关联表查询不大于3张
合理设置表索引
4:代码提交规范
- 先拉取同步!!!,先拉取同步!!!,先拉取同步!!!。避免提交冲突。
- 禁止未运行校验,或者运行报错情况下提交代码。
- 清除无用代码以及引用。
- 准确简洁描述本次提交的内容。