编码质量
推荐工具检测
插件名称 | 作用 | 建议程度 |
---|---|---|
IDEA自带插件(IDEA Analyze) | 编译器警告 | 强制 |
SonarLint | 代码质量检查 | 强制 |
CodeMetric | 代码复杂度提醒 | 建议 |
MetricsReloaded | 代码复杂度计算 | 建议 |
Alibaba Java Coding Guidelines | 代码规范 | 建议/部分规范不建议 |
代码复杂度各项指标
指标项 | 英文全称 | 中文说明 |
---|---|---|
CogC | Cognitive Complexity | 认知复杂度,即代码可读性 |
ev(G) | Essential Cyclomatic Complexity | 基本复杂度 |
iv(G) | Module Design Complexity | 模块设计复杂度 |
v(G) | Cyclomatic Complexity | 圈复杂度 |
WMC | Weighted methods per class | 每个类的加权方法 复杂度 |
关于Lombok
- 属性及方法最小化原则,仅推荐使用
@Getter
,@Setter
,@Slf4j
注解。 - JaveBean属性较多的类禁止使用
@Data
,@Builder
,@Accessors
静态构造,链式调用引发的JavaBean问题 - 禁止使用
@RequiredArgsConstructor
+ final 进行Spring的Bean强依赖构造。防止生成复杂构造器,Bean初始化问题等。 - 不建议使用
@SneakyThrows
注解。使用该注解会将受检异常转换为非受检异常,但在转换过程中会丢失原始异常的类型信息。破坏了异常处理的语义,可能导致不可控的程序行为。
IDEA推荐插件
- GitToolBox
- MybatisX
- Maven Helper
- GenerateAllSetter
- GsonFormatPlus
- Statistic
归档原则
OSS文件归档原则
- 临时文件:
/temp/{profile}/{bizKey}[/bizId]/{fileName}
- 正常文件:
/public/{profile}/{bizKey}[/bizId]/{fileName}
- 私有文件:
/private/{profile}/{bizKey}[/bizId]/{fileName}
GIT分支归档原则
- 功能迭代分支:
feature/xxx
- 修复分支:
hotfix/xxx
(线上紧急)或者fix/xxx
(开发测试) - 优化、重构分支 :
optimize/xxx
缓存,分布式锁的KEY原则
原则上redis的key命名应该全部小写,并且使用:
作为key的分隔符。 除极端特殊情况外所有的Redis数据都应该有过期时间设置。
- 锁:
lock:{BIZ_KEY}[:BIZ_ID]
注意:BIZ_KEY
也可以是多级结构。 - 缓存:
cache:{BUSI_DATA_NAME}[:BIZ_ID]
注意:BUSI_DATA_NAME
指的是缓存的业务数据的唯一名称,也可以是多级结构。
日志记录存储原则
日志首选框架logback
,SpringBoot
默认采用logback
作为日志框架,无缝集成,最佳的兼容与支持。虽然log4j2支持异步日志记录,性能较强。但性能差距不是一个决定性因素,且除了巨量的日志记录和极端要求性能的情况下,log4j2的性能与logback性能差距微乎其微。
日志存放路径最佳实践:/opt/logs/${spring.application.name}/${server.port:8080}/out.log