Skip to content

介绍

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
 */
  • 方法
java
**
 * 功能描述:
 * 〈$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())
  • 变量
java
/**
 * 变量名称
 */

3:业务规范

  • domain

  • 不得有任何的业务逻辑或者计算

  • 基本数据类型必须使用包装类型(Integer, Double、Boolean 等)

  • 每个属性必须添加注释,并且必须使用多行注释。

  • 必须使用 lombok 简化 getter/setter 方法

  • 建议对象使用 lombok@Builder ,@NoArgsConstructor,同时使用这两个注解,简化对象构造方法以及set方法。

  • controller

  • 主要做业务分发,不参与业务处理,所以尽量简洁明了

  • 使用同一结果Result包装返回

  • 约定当前controller 只引入当前service,避免业务交叉引用,有利于业务解耦。

java
   /**
     * 功能描述:
     * 〈示例功能〉
     * @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存在很多与控制层不存在交互的方法,文件排版混乱,所以将非交互方法放入独立业务处理类,简化当前业务文件。

java
/**
 * 约定当前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:代码提交规范

  • 先拉取同步!!!,先拉取同步!!!,先拉取同步!!!。避免提交冲突。
  • 禁止未运行校验,或者运行报错情况下提交代码。
  • 清除无用代码以及引用。
  • 准确简洁描述本次提交的内容。

郑州蝉鸣数字科技有限公司出品