本规范只适合个人,还望大家多提意见
Table of Contents
目标
- 整洁
- 统一
- 易读
- 模块化
- 心情愉悦
原则
- 短小精悍 最多50行,建议30行以下
- KISS “kiss Simple and Stupid” 的缩写,意思是“保持简单和愚蠢”
- 六大原则
- 单一职责原则(Single Responsibility Principle, SRP)
- 一个类只负责一个功能领域中的相应职责
- 开闭原则(Open-Closed Principle, OCP)
- 对扩展开放,对修改关闭,在不修改原有内部代码的情况支持扩展
- 里氏代换原则(Liskov Substitution Principle, LSP)
- 依赖倒转原则(Dependency Inversion Principle, DIP)
- 依赖抽象而不是实现
- 接口隔离原则(Interface Segregation Principle, ISP
- 迪米特法则(Law of Demeter, LoD)(最少知识法则)
- 单一职责原则(Single Responsibility Principle, SRP)
代码规范
规约
- 返回值不要使用 Map 除非你知道你在干什么
- 尽量减少魔法值,多使用枚举或常量
- 命名
- 禁止使用 Oracle、MySQL、JavaScript、Java、Python、Go 关键字命名
- 使用英文,不能中英文混用,金融专业名词问卓阳
- Java 代码使用驼峰英文,常量大写下划线
- 枚举类加 Enum 后缀
- 查询方法 get 开头,不再使用 find / select
- 只能使用专业约定的缩写,不要制造缩写,不要嫌变量名长
- 例如 requestNo 和 RN
- 不要在不同的类、表、项目中使用近义的英文,应该使用同一个
- 例如 status、verify_status
- DTO 数据传输对象
- DO 数据库实体对象
- 风格
- 缩进使用2个空格
- 单行长度不建议超过 120, 为了语义通顺,可以减少没必要的换行
- 方法参数尽量少于10个
- 方法有效代码行数不建议超过 50 行
- 过长的方法难以维护和理解
- 例外:
- 某些对象初始化导致方法过长
- 方法处理严重依赖上下文结果,比如计算逻辑
- 方法复杂度建议不超过 10
- 不同逻辑、不同语义代码之间插入一个空行
- 控制语句必须加括号,单行也不例外
- 注释必须使用 javadoc 规范,注意不加冒号
- @author 作者
- @param 参数名 参数用途
- @since 版本号/时间
- @see 关联类
- @return 返回值描述
- OOP
- 重写 toString()
- 过时方法加 Deprecated 注解
- 调用 equals 时注意空指针
- 调用其他方法也注意空指针
- 注意访问级别
- 集合处理
- 优先使用集合工具类判空,虽然 mybaits 的返回值空集合,但也不要直接调用 size 判空
- 如果能预知容量,初始化时规定容量,防止扩容
- 注释
- 被注释掉的代码前一定要有原因
- 复杂逻辑最好在方法上写出实现思路
- 方法参数如果是枚举值,尽量写一下
日志和异常
- catch 就是为了处理异常,不能什么都不做,至少需要打日志
- 不要使用 e.printStackException 打印日志
- 使用 warn 记录参数错误问题,不要使用 error
- 对于可重试且不是系统配置问题导致的错误,打印 warn
- 系统配置错误、重试不能解决,打印 error
- 打印 log 时 exception 对象,不用出现在占位符中
- 日志描述内容使用英文下划线,尽量不要使用空格,kibana 搜索有问题
- 框架日志看情况调整级别
- 关键流程,如进件、审核、还款流程多打关键日志
- 关键流程分支有日志
- 日志必须有效,可用于排查问题
单元测试
- 提高单元测试覆盖率
- 原则
- 独立
- 可重复
- 自动化
SQL
- 注意 Null 值判断
安全
- 四要素脱敏
- 用户只能访问自己的数据
- 用户账单
- 机构查询自己的账单
- 不要依赖前端校验
- SQL 注入
建议
- 过于垃圾代码和配置(过时,无法访问)直接删除
- 多用组合,少用继承
- 参数最小化,避免大而空
- 多用工具类,少写重复代码 优先级 guava/apache
- 时期计算使用java8新语法,或者 jode工具类
- 不要重复自己 DIY
流程
gitlab pull meger 时, 写上主要改动的地方和逻辑,方便 review
上线流程
开始测试时
- 检查redmine是否存在遗漏(flyway,新资源,SQL)
- 如果需要运维配合,开始和老铁聊聊人生
- 项目测试中,是否新加入项目
准备上线
- 如果有 flyway 变更
- 使用一个空本地库,那其上执行 flyway
- 跑单测,如果有问题,解决后再上线
- 检查代码是否有冲突
- 检查 redmine 是否存在遗漏,防止出现项目漏上,flyway漏写情况
- 检查代码是否有配置改动,注意生产环境配置
- 检查是否有SQL脚本(初始化数据)
- 检查代码是否有快照版本
- 代码一定要本地编译通过
上线后
- 确认flyway是否执行
- 确认SQL是否执行
- 确认代码是否有误
- 确认项目是否上齐
- 确认定时任务修改
- 确认功能是否符合预期
网友评论