文章目录
- 1. 前言
- 2. 多模块项目
- 3. Git 提交信息规范
- 4. 日志打印规范
- 5. 代码注释规范
- 6. 数据库规范
- 7. Redis 规范
1. 前言
团队协作开发时,制定并执行统一规范,对后续开发管理维护是很有帮助的,对于团队新人来说也容易更快融入团队,投入到产品研发工作。以下规范可供参考。
2. 多模块项目
图2-1、多模块项目结构图
多模块项目设计
- 父项目既作为聚合项目也用来管理jar包,所有jar包的maven依赖统一在父项目的pom文件中添加。依赖具有传递性,所以各模块及子模块只需关注自身与其他模块的依赖关系即可,注意避免循环依赖。
- 整个项目的基础模块分为: xx-common、xx-core、xx-all及其他业务模块,其中 xx-common为公共项目所有项目需依赖,该项目主要放工具类、常量、枚举等通用文件,xx-core项目为整个系统基础项目主要用于底层代码及核心模块,xx-all为打包项目及子模块启动项目子模块测试需要在改模块依赖并启动,理论上严禁在子模块配置数据库、缓存、等基础配置文件。其他功能模块可以是定时任务,开放平台,运维平台等。
- 所有业务子模块又分为三个子模块分别以xx-xx-model、xx-xx-service、xx-xx-web结尾,子模块分为model、service、web,model其下分为model、service(接口)、util、vo等;service其下为接口的实现类;web里面为控制层代码理论上web下只存在Controller;
- Controller里不可以有业务代码,可以有简单参数判断,返回值转型。接收参数参数值超过两个则必须封装VO来接收参数。所有业务代码都在service项目中实现。
- Dao层由model构成,model方法命名规范为:单个对象查询方法命名以get开头以什么作为条件则应以by修饰;多对象查询如:列表/map查询方法命名则以find开头以List/Map结尾;更新方法命名以update开头;保存方法命名以save开头;删除方法命名以remove开头; 如是更新、删除、保存为批量操作,以batch加上updata、remove、save;统计个数方法命名以count开头;计算总和方法命名以sum开头;分页查询方法命名以find开头 ByPage结尾;返回值为Boolean类型方法命名则以check开头;
- 类的命名:常量以Contsant结尾。枚举以Enum结尾,编码以Code结尾,Key类以Key结尾,异常以Exception,抽象类以Abstract为前缀,基类以Base为前缀;
- 包命名统一无复数,如util,不是utils
- 工具类命名统一Util结尾且统一在common项目下,个性化工具类除外,个性化工具类放在子项目model模块的util包下
3. Git 提交信息规范
图3-1、Git History 提交信息图
3.1 提交规范
EXPRESSION type(scope):subject
type用于说明 commit 的类别
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test: 增加测试
- chore:构建过程或辅助工具的变动
scope用于说明 commit 影响的范围,或者说本地提交涉及的功能模块
subject是 commit 目的的简短描述
3.2 示例
git commit -m “feat(数据管理): 表格数据渲染”
git commit -m “feat->数据管理->表格数据渲染”
4. 日志打印规范
图4-1、阿里云日志服务图
- 日志对象使用lombox的@Slf4j注解引入
- 日志输出规范:[方法描述]:+ 信息,所有为了方便测试打印的日志在功能测试完成后应删除
- 发生错误/异常的地方必须打印error日志,必要的业务日志要打印以便于正式环境出错后排查问题
- 输出Exceptions的全部Throwable信息,因为logger.error(msg)和logger.error(msg,e.getMessage())这样的日志输出方法会丢失掉最重要的StackTrace信息,正确的打印方式为:logger.error(msg,e)
- 不允许出现System print(包括System.out.println和System.error.println)语句。
- 不允许出现e.printStackTrace。
- 不允许记录日志后又抛出异常,因为这样会多次记录日志,只允许记录一次日志。
5. 代码注释规范
5.1 类注释模板
/**
* @className: BaseController
* @description: 类描述
* @author: niaonao
* @date: 2020/10/24
**/
5.3 方法注释模板
/**
* @description: TODO 方法描述
* @param: tid
* @param: advertGuid
* @return: pers.niaonao.common.Result
* @author: niaonao
* @date: 2020/10/24
*/
6. 数据库规范
- XX系统基础业务表命名以xx_base_开头。
- XX系统系统相关表以xx_sys_开头,与业务无关只跟系统相关的表。
- XX系统运维系统涉及表以xx_operate_开头。
- XX系统临时表以xx_temp_开头。
- 字段命名为xx_xx下划线命名严禁使用驼峰式命名,如 user_name。
- 除数据字典表类型表外 其他表设计需包含 id、state 、create_time 、update_time。
- int类型字段长度定义为11为既int(11) bigint类型字段长度定义为20既bigint(20),使用bigint还是int类型由开发者自己根据业务需求定义一般数据量不大的情况下尽量使用int类型。
- decinal类型字段定义为(13,2)
- state字段使用tinyint类型即(tinyint 4) 其中统一用0表示删除 1表示正常; create_time、update_time使用(date_time)。
- 字段命名理论上不允许使用复数,即xx_xxs
- 新建表必须注释、字段必须注释。
- 每个表的索引数理论上不允许超过6个,索引命名:唯一索引以uk_字段名;普通索引以idx_字段名;
- 所有数字类型都不允许为null,且必须设置默认值。
- 所有update_time 设置默认是为CURRENT_TIMESTAMP 前设置每次操作都根据当前时间戳自动更新。
7. Redis 规范
- 所有Redis缓存key必须在缓存key常量类里面定义。
- XX系统下,缓存key命名格式为:固定前缀xx_cache_key_ + “业务标识”+自定义信息 +“map/list” + id。
- 所有使用到缓存的方法命名必须以FromCache结尾,注意方法内容为先从缓存中取若取不到数据则从数据库查询若数据不为null则放入缓存并返回。
- 控制缓存key的生命周期,redis不是垃圾桶。(根据业务场景需求)
- 拒绝bigkey(防止网卡流量、慢查询),string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。
- 使用统一封装的工具类调用Redis,严禁自己直接调用Redis或者自己封装工具类。
Powered By niaonao