代码审查清单
代码审查是保证代码质量的关键环节。以下清单帮助你系统性地审查代码。
Spec 合规
| 检查项 | 说明 |
|---|---|
| 实现与 Spec 一致 | 代码实现与 spec.md 中的需求描述一致 |
| 未超出 Spec 范围 | 没有添加 Spec 未要求的功能 |
| 任务清单完成 | tasks.md 中的所有任务标记为完成 |
| 无遗漏场景 | Spec 中定义的边界场景已处理 |
编码规范
后端
| 检查项 | 说明 |
|---|---|
| 分层正确 | Controller 不含业务逻辑,Service 不含数据访问 |
| SQL 在 XML 中 | 查询 SQL 写在 Mapper XML,不用 LambdaQueryWrapper |
| 包结构规范 | controller/service/mapper/entity/dto/vo 分层正确 |
| 命名规范 | 类名 PascalCase,方法名 camelCase,常量 UPPER_SNAKE |
| 异常处理 | 使用全局异常处理,不吞掉异常 |
| 日志规范 | 使用 SLF4J,关键操作有日志,敏感信息不记录 |
前端
| 检查项 | 说明 |
|---|---|
| 组合式 API | 使用 <script setup> 语法 |
| 字典组件 | 下拉和标签使用 DictSelect / DictTag / useDict |
| Schema 响应式 | Schema 定义为 computed |
| 占位符格式 | URL 占位符使用 :id 格式 |
| 按钮样式 | 使用 UnoCSS 语义化颜色类 |
| API 调用 | 使用 @/utils/http 统一请求 |
安全红线
| 检查项 | 说明 |
|---|---|
| 无硬编码密钥 | 密码、AK/SK、Token 不硬编码在代码中 |
| 日志不泄露敏感信息 | 手机号、身份证、银行卡不打印到日志 |
| Key 脱敏 | API Key 返回前端时脱敏(前4后4,中间 ****) |
| SQL 注入防护 | 使用 #{} 参数化,禁止 ${} 拼接 |
| XSS 防护 | 用户输入不直接渲染为 HTML |
| 权限校验 | 敏感接口有 @SaCheckPermission 注解 |
| 金额用 long | 金额字段使用 long 类型,单位分 |
数据库规范
| 检查项 | 说明 |
|---|---|
| 标准字段 | 业务表包含 id、tenant_id、create_by、create_time、update_by、update_time |
| 逻辑删除 | 主数据表使用逻辑删除(@TableLogic) |
| tenant_id | 业务数据 tenant_id 为 1,不为 0 |
| 字符集 | utf8mb4 + InnoDB |
| Flyway 脚本 | 结构变更通过 Flyway 脚本,可重复执行 |
| 唯一索引 | 逻辑删除表使用删除标记唯一索引 |
测试覆盖
| 检查项 | 说明 |
|---|---|
| 核心逻辑有测试 | Service 层核心方法有单元测试 |
| 边界场景有测试 | 空值、异常、边界条件有测试用例 |
| 测试可独立运行 | 测试不依赖外部环境(数据库连接等) |
| 测试命名规范 | 方法名_条件_期望结果 格式 |
文档同步
| 检查项 | 说明 |
|---|---|
| 新增接口有文档 | Controller 接口有对应的 API 文档 |
| 配置项有说明 | 新增配置项在文档中说明 |
| 数据库变更有脚本 | 表结构变更有 Flyway 脚本 |
| 变更记录已更新 | CHANGELOG.md 已更新 |
循环依赖检查
| 检查项 | 说明 |
|---|---|
| Service 不互相注入 | Plugin 间 Service 不互相 @Autowired |
| 依赖方向正确 | Starter 不依赖 Plugin,Plugin 不依赖业务模块 |
| 事件解耦 | 跨 Plugin 协作使用事件机制 |
审查流程
- 自查:开发者按清单自查
- 交叉审查:另一位开发者审查
- Spec 审查:确认实现与 Spec 一致
- 安全审查:确认安全红线无违反
- 合并:所有审查通过后合并代码
审查工具
| 工具 | 用途 |
|---|---|
| Git Diff | 查看代码变更 |
CodeBuddy /review | AI 辅助审查 |
| SonarQube | 代码质量扫描(可选) |
| ESLint | 前端代码规范检查 |
