# 前端开发规范
# 文件夹/文件命名规范
文件名必须用 蛇形命名法
,例如:user-list.vue
相关模块文件必须放在同一目录下,目录入口文件必须命名为 index.vue
# Vue 组件命名规范
组件的命名需遵从以下原则:
- 有意义的 : 不过于具体,也不过于抽象
- 简短 : 2 到 3 个单词
- 具有可读性 : 以便于沟通交流
同时还需要注意:
- 必须符合自定义元素规范 : 使用连字符分隔单词,切勿使用保留字。
- app-前缀作为命名空间 : 如果非常通用的话可使用一个单词来命名,这样可以方便于其它项目里复用。
# 路由命名规范
路由 path 必须使用蛇形命名法
,例如 /user/user-index,必须符合 restfull 定义规范
路由跳转必须使用 name
定位, 禁止直接使用 path
定位,
# 组件模板规范
模板中禁止出现复杂的三元表达式和计算式,应用 computed
、method
代替。
模板中禁止出现行内样式
# 验证组件的 props
props
应尽量使用原始数据类型,并强制要求增加数据类型限制。
# Javascript 规范
Javascript 代码 统一采用 ES6
规范编写.
如无特殊需要,function()
一律用箭头函数代替
禁止出现使用 "+" 号连接动态字符串,应使用魔术字符串代替
处理异步代码时,统一使用 async await
方式编写,禁止使用 *, yield
必须符合项目定义的 ESLint
标准,代码必须统一格式化
# 后端开发规范
# 总体命名规范
- 命名即设计。好的代码,有意义的名字,一看就懂。
- 项目名、包名、目录名,以模块为基准;类名、方法名、流程名、rest 资源名以模型为基准。
- 表名不要超过30个字符,所以可以用缩写。其他不建议用缩写。rest 里面要用-分隔,其他命名要驼峰式。
- 除了常量、枚举类外,不建议大写。
# Restful命名规范
规范
- 统一前缀,一般是所有path前缀为/api;
- 统一前缀后面一般是系统名(或者模块名),然后是资源名
- 资源名:
- 使用名词,而不是动词
- 使用复数,而不是单数
- 资源名必须小写,或者用短横线“-”连接,如tree-node
- HTTP Method
- GET:从服务器中查询一个或多个资源
- DELETE:在服务器中删除资源
- PUT:在服务器中更新资源
- POST:在服务器新建一个资源
- 其他方法一般不用
- PathParam还是QueryParam:一般来讲,通过资源唯一标识查询单个资源实体时,将唯一标识放在path上,即用PathParam。而通过资源其他属性来做过滤查询的话,则用QueryParam。
- 资源操作:如果资源需要做一些具体的操作可以用actions作为path(尽量避免用action)
示例(resteasy 和 swagger)
/**
* 构建定义相关API
*
*
*/
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/api/ci/builddefs")
@Api(description="构建定义管理对外接口")
public interface IBuildDefinitionController {
/**
* 获取构建定义
*
* @param buildDefinitionId 构建定义ID
* @return 构建定义
* @throws Exception
*/
@GET
@Path("/{buildDefinitionId}")
@ApiOperation("获取构建定义")
BuildDefinition getBuildDefinition(@PathParam("buildDefinitionId")@ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
/**
* 获取构建定义详细信息
*
* @param buildDefinitionId 构建定义ID
* @return 构建定义详细信息
* @throws Exception
*/
@GET
@Path("/{buildDefinitionId}/details")
@ApiOperation("获取构建定义详细信息")
BuildDefinition getBuildDefinitionDetails(@PathParam("buildDefinitionId")@ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
/**
* 查询项目所有的构建定义
*
* @param projectId 项目ID
* @return 构建定义列表
* @throws Exception
*/
@GET
@Path("/")
@ApiOperation("查询项目所有的构建定义")
PageResultList<BuildDefinition> queryBuildDefinitions(@QueryParam("projectId")@ApiParam("项目ID") String projectId,
@QueryParam("pageIndex")@ApiParam("起始页数") int pageIndex,
@QueryParam("pageSize")@ApiParam("每页大小") int pageSize) throws Exception;
/**
* 创建一个构建定义
*
* @param buildDefinition 构建定义
* @param componentIds 组件IDs
* @return 构建定义
* @throws Exception
*/
@POST
@Path("/")
@ApiOperation("创建一个构建定义")
BuildDefinition createBuildDefinition(@ApiParam("构建定义") BuildDefinition buildDefinition) throws Exception;
/**
* 克隆一个构建定义
*
* @param buildDefinitionId 构建定义ID
* @param buildDefinitionName 构建定义名称
* @return 构建定义
* @throws Exception
*/
@POST
@Path("/{buildDefinitionId}/actions/clone")
@ApiOperation("克隆一个构建定义")
BuildDefinition cloneBuildDefinition(@PathParam("buildDefinitionId")@ApiParam("构建定义ID") String buildDefinitionId,
@QueryParam("buildDefinitionName")@ApiParam("构建定义名称") String buildDefinitionName) throws Exception;
/**
* 修改构建定义
*
* @param buildDefinition 构建定义
* @param componentIds 组件IDs
* @return
* @throws Exception
*/
@PUT
@Path("/{buildDefinitionId}")
@ApiOperation("修改构建定义")
BuildDefinition modifyBuildDefinition(@ApiParam("构建定义") BuildDefinition buildDefinition) throws Exception;
/**
* 删除构建定义
*
* @param buildDefinitionId 构建定义ID
* @return 构建定义
* @throws Exception
*/
@DELETE
@Path("/{buildDefinitionId}")
@ApiOperation("删除构建定义")
BuildDefinition removeBuildDefinition(@PathParam("buildDefinitionId")@ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
/**
* 执行构建
*
* @param buildDefinitionId 构建定义ID
* @param buildParams 构建参数
* @param buildTag 构建标签
* @return 构建实例
* @throws Exception
*/
@POST
@Path("/{buildDefinitionId}/actions/execute")
@ApiOperation("执行构建")
BuildInstance executeBuildDefinition(@PathParam("buildDefinitionId")@ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
/**
* 取消构建
*
* @param buildDefinitionId 构建定义ID
* @param buildInstanceId 构建实例ID
* @throws Exception
*/
@POST
@Path("/{buildDefinitionId}/instances/{buildInstanceId}/actions/cancel")
@ApiOperation("取消构建")
BuildInstance cancelBuildDefinition(@PathParam("buildDefinitionId")@ApiParam("构建定义ID") String buildDefinitionId,
@PathParam("buildInstanceId")@ApiParam("构建实例ID") String buildInstanceId) throws Exception;
/**
* 分页查询构建实例历史
*
* @param buildDefinitionId 构建定义ID
* @param pageIndex 起始页数
* @param pageSize 每页大小
* @return 构建实例历史列表
* @throws Exception
*/
@GET
@Path("/{buildDefinitionId}/instances")
@ApiOperation("查询构建实例历史")
PageResultList<BuildInstance> queryBuildInstances(@PathParam("buildDefinitionId")@ApiParam("构建定义ID") String buildDefinitionId,
@QueryParam("pageIndex")@ApiParam("起始页数")int pageIndex,
@QueryParam("pageSize")@ApiParam("每页大小")int pageSize) throws Exception;
/**
* 获取构建实例
*
* @param buildInstanceId 构建实例ID
* @return 构建实例
* @throws Exception
*/
@GET
@Path("/{buildDefinitionId}/instances/{buildInstanceId}")
@ApiOperation("获取构建实例")
BuildInstance getBuildInstance(@PathParam("buildInstanceId")@ApiParam("构建实例ID") String buildInstanceId) throws Exception;
/**
* 删除构建实例
*
* @param buildInstanceId 构建实例ID
* @return 构建实例
* @throws Exception
*/
@DELETE
@Path("/{buildDefinitionId}/instances/{buildInstanceId}")
@ApiOperation("删除构建实例")
BuildInstance removeBuildInstance(@PathParam("buildInstanceId")@ApiParam("构建实例ID") String buildInstanceId) throws Exception;
/**
* 清空构建历史
*
* @param buildDefinitionId 构建定义ID
* @return
* @throws Exception
*/
@DELETE
@Path("/{buildDefinitionId}/instances")
@ApiOperation("删除构建实例")
void clearBuildInstances(@PathParam("buildDefinitionId")@ApiParam("构建定义ID") String buildDefinitionId) throws Exception;
}
# Java开发规范
- 代码不只是用于机器执行,更重要的是要给人看的。
- 命名规范
- 所有命名一定要通俗易懂,宁可长一点。
- 项目命名规范:一般是系统名-子系统名[-模块名]
- 包命名规范:固定前缀. 系统名 . 子系统名 . [ 模块名 ] .[ 子模块名 ].[代码类型]
- 固定前缀: 比如:com.gdrcu.itamp
- 代码类型:
- api:api接口
- spi:spi接口
- impl:实现接口
- model:模型
- exception:异常定义
- constant:常量定义
- util:工具类
- extension:扩展
- controller:rest对外接口及实现
- service:业务逻辑接口及实现
- dao:数据库模型操作
- 类命名规范:有意义的英文名词,接口一般以I为前缀,工具类一般以Util为后缀
- 方法命名规范:动宾结构。
- controller/service前缀: get(query)/create/remove/modify, get返回的是单个实体,query返回的是List或者Array;如果是其他业务,可以是使用其他更有意义的名字;
- dao前缀: get(query)/insert/delete/update, get返回的是单个实体,query返回的是List或者Array
- controller:方法不允许重名
- 代码文件规范
- 全部文件必须使用UTF-8编码
- 文件名不允许使用中文字符
- 文件名不允许使用空格,目录不允许大写
- 代码一定要统一格式化,要注意可阅读性
- 注释规范
- Class必须有注释说明(JavaDoc)
- 对外API的方法必须有注释说明(JavaDoc),参数也要说明
- restApI必须要有swagger注解
- Public方法建议有注释说明(JavaDoc)
- 关键复杂算法,一定要有注释说明
- 日志规范
- error 出错时,除了堆栈信息外的一些参数需要在此加入
- 不允许使用system.out,e.printStackTrace记录日志
- 异常规范
- 如果不知道如何处理异常,不要捕获异常
- 如果捕获异常,一定要记录异常日志信息,或者转译异常(一定要带着原始异常)
- 单元测试
- 类名:单元测试XXXTestCase,比如:UserTestCase
- 方法名:testXXX前缀,比如:testUser
- assertXXX,正向判断
- 可重复执行(增删改查,还原系统)
- 测试最外层即可(因为覆盖率很重要),比如controller;除非测试不到
- 代码提交日志规范
- TASK:完成JIRA系统中的任务 示例:TASK:12345,EPP部署
- BUG:修改BUG系统中的BUG
- Review:修改代码评审发现的缺陷
- Update:修改了XXX功能,或者新增了XXX,或者删除了XXXX,或者重构了XXX
- 禁止强推(git push -f)或者其他工具,比如eclipse
# 数据库规范
- 命名
- 总体
- 全部大写,一般不区分大小写
- 不能太长,不超过30个字符,如果超长,必须缩写
- 有意义的英文单词
- 不能有空格
- 不能使用中文
- 不建议使用中文拼音
- 一般没有阿拉伯数字
- 使用下划线连接
- 表名:系统名称缩写_对象名称,示例:DPS_DEPLOY_DESIGN,DPS_USER
- 列名:有意义的英文单词,示例:ORG_ID,ORG_CODE,ORG_NAME,CREATE_TIME,IS_EDITABLE,USER_NAME, PASSWORD等
- 值:不建议大写、缩写。建议小写,中杠分隔。
- 总体
- 列类型
- 一个表一般都要有主键(除了关联表之外),主键一般是数字构成,即使是varchar类型(主键是给计算机用的)
- varchar类型,一定要设置合适的长度
- 时间类型,一定要选取合适类型,有的只有日期,有的只有时间,有的全有,比如date,time,timestamp
- 表设计时,注意增加扩展列的可能性,考虑一定的冗余