约束
本规范仅适用于内部项目以及关联项目。内部项目皆受“业务”驱动,以“微应用”为核心单位。 “微应用”:指单例服务或单个微服务。
| 序号 | 类型 | 命名规范 | 说明 | 备注 |
|---|---|---|---|---|
| 1 | 变量 | ${co} | 微应用名称 | |
| 2 | 变量 | ${business} | 业务名称 | |
| 3 | 变量 | ${type} | 自定义类型名称 | |
| 4 | 变量 | ${time} | 时间 | |
| 5 | 符号 | 【变量】+? | 此变量非必需 | |
数据库
主要参考《数据库MySQL设计规范》,其中规范2.2.c.1数据库对象命名规范略作变动:
- 所有表需要加 ${co} 作为前缀;例如:_cdthings_user(cdthings项目用户主表)
- 项目主业务,以 ${co}${business} 格式;例如:_tpms_plan(TPMS项目计划表)
- 定制化业务,以 ${co}${business}${type} 格式;例如:tpms_plan_detail_pfma(TPMS项目总装计划表)
- 字典表中需定义 ${type}翻译,需要时以供查找
| 序号 | 类型 | 命名规范 | 说明 | 备注 |
| —- | —- | —- | —- | —- |
| 1 | 主数据表 | ${co}${business} | 例如:author2uer,代表授权模块用户表;
例如:tpms_plan_detail,代表tpms项目计划详情表 | | | 2 | 业务详情辅助数据表 | ${co}${business}${type} | 例如:tpms_plan_detail_pfma,代表tpms项目总装定制化计划详情表 | | | 3 | 关联中间表 | ${co}${business}tr | 例如:author2_user_role_tr,代表授权模块记录用户和角色的关系表 | | | 4 | 通用代码/字典表 | ${co}${business?}td | 例如:pmt_td,代表pmt项目的字典表;
pmt_project_type_td,代表pmt项目的项目类型字典表 | | | 5 | 临时表 | ${co}${business}${type}_tmp | 例如:tpms_plan_detail_tmp,代表tpms项目计划详情临时表 | | | 6 | 备份表 | ${co}${business}${type}_bak | 例如:tpms_plan_detail_bak,代表tpms项目计划详情操作备份表 | | | 7 | 历史表 | ${co}${business}_${type}_th | 例如:tpms_plan_detail_th,代表tpms项目计划详情操作历史表 | | | 8 | 接口中间表 | ${co}_api | 例如:crm_api,代表crm项目接口表 | |
项目结构
- 包的命名:包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数形式,但是类名如果有复数含义,类名可以使用复数形式。
- 接口和实现类的命名规则:对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。
项目根目录/src/main/java:放置项目Java源代码
项目根目录/src/main/resources:放置项目静态资源和配置文件
项目根目录/src/test/java:放置项目测试用例代码
|_annotation:放置项目自定义注解
|_aspect:放置切面代码
|_config:放置配置类
|_constant:放置常量、枚举等定义
|constnt:存放常量定义
|enums:存放枚举定义
|_controller:放置控制器代码
|_filter:放置一些过滤、拦截相关的代码
|_mapper:放置数据访问层代码接口
|_model:放置数据模型代码
|entity:放置数据库实体对象定义
|dto:存放数据传输对象定义
|vo:存放显示层对象定义
|_service:放置具体的业务逻辑代码(接口和实现分离)
|intf:存放业务逻辑接口定义
|__impl:存放业务逻辑实际实现
|_utils:放置工具类和辅助代码接口
主要参考《后台规范JAVA篇》:
接口的命名通常由多个独立的单词组成,每个组成的单词必须首字母大写,其它所有字母 小写。接口的命名应当简短、突出重点。通常情况下,应当避免使用缩略语来命名类,除非该缩略语已被熟知。
- POJO 类中布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。
- 杜绝不规范的缩写,避免望文生义
- 接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁 性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是 与接口方法相关,并且是整个应用的基础常量。
- 控制流语句 if、for、while、switch 和 try 不可以嵌套过深(默认值为 3,超过 3 层必须每层 加逻辑注释)
接口路径中包含具体接口名称的名词,接口数据操作动作以HTTP请求方式来区分。常用的HTTP请求方式有:
GET:从服务器取出资源(一项或多项)。
POST:在服务器新建一个资源。
PUT:在服务器更新资源(客户端提供改变后的完整资源)。
PATCH:在服务器更新资源(客户端提供改变的属性)。
DELETE:从服务器删除资源。各层命名规约:
A) Service/DAO 层方法命名规约
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects。
3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save/insert 做前缀。
5) 删除的方法用 remove/delete 做前缀。
6) 修改的方法用 update 做前缀。
B) 领域模型命名规约
1) 数据对象:xxxDO,xxx 即为数据表名。
2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
3) 展示对象:xxxVO,xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。
- 获取信息类接口均使用get类型
- 新增接口使用post类型,并返回新增的实体类列表
- 修改接口使用post类型,并返回修改后的实体类列表
- 删除接口使用delete类型,彻底删除接口以/completelyDelete命名.不然接口默认为假删(删除标记置位那种)
- 删除接口默认无返回,以统一封装格式的code为基准判断成功与否即可
- 导入接口使用post,并以/import/**命名,数据量较小情况下返回导入后的实体类列表
- 导出接口使用get,并以/download/*命名
- get和delete接口的参数均跟在url后
- post请求参数均放body里
- 返回数据字典接口格式,均已/**/dic命名 例如在用户的接口下返回 [{“label”:”姓名”,”id”:1}]这样的格式供前端下拉框使用的场景
- 返回实体类某个字段的字典表时,以/字段名/dic命名 如用户实体类的sex字段1为男人,0为女人 命名为/sex/dic
- 统计接口均以/chart/**命名,一般情况下独立controller
- 接口上复杂的业务逻辑需要说明 对前端提供接口需说明调用接口产生的业务后果 对提供后端的接口需要详细说明入参出参,尤其入参有无限制
