# 重构计划模板 使用这个模板来记录和跟踪你的重构工作。 --- ## 项目信息 | 字段 | 值 | |-------|-------| | **项目 / 模块** | [项目名称] | | **目标文件** | [要重构的文件列表] | | **创建日期** | [日期] | | **作者** | [姓名] | | **状态** | Draft / In Review / Approved / In Progress / Completed | --- ## 执行摘要 ### 目标 - [ ] [主要目标:例如,提升支付流程可读性] - [ ] [次要目标:例如,减少重复代码] - [ ] [第三目标:例如,提升可测试性] ### 约束 - [ ] [约束 1:例如,不能改公共 API] - [ ] [约束 2:例如,必须保持向后兼容] - [ ] [约束 3:例如,不能改数据库 schema] ### 风险等级 - [ ] Low - 小改动,测试充分 - [ ] Medium - 中等改动,有一定风险 - [ ] High - 大改动,需要特别注意 --- ## 重构前检查清单 ### 测试覆盖评估 | 指标 | 当前值 | 目标值 | 状态 | |--------|---------|---------|--------| | 单元测试覆盖率 | __% | ≥80% | | | 集成测试 | Yes/No | Yes | | | 所有测试通过 | Yes/No | Yes | | ### 开始前必须满足 - [ ] 所有测试通过 - [ ] 已读懂并审查代码 - [ ] 已有备份 / 版本控制 - [ ] 已获得用户批准 --- ## 已识别的代码异味 ### 摘要 | # | 异味 | 位置 | 严重性 | 优先级 | |---|-------|------|------|------| | 1 | [例如,Long Method] | [file:line] | High | P1 | | 2 | [例如,Duplicate Code] | [file:line] | Medium | P2 | | 3 | [例如,Feature Envy] | [file:line] | Low | P3 | ### 详细分析 #### 异味 #1:[名称] **位置**:`path/to/file.js:45-120` **描述**:[对问题的详细描述] **影响**: - [影响 1] - [影响 2] **建议方案**:[如何修复的简要说明] --- ## 重构阶段 ### 阶段 A:快速收益(低风险) **目标**:快速、低风险的改进,立刻产生价值 **预计改动**:[X 个文件,Y 个方法] **需要用户批准**:Yes / No | # | 任务 | 文件 | 重构手法 | 状态 | |---|------|------|----------|------| | A1 | 将变量 `x` 重命名为 `userCount` | utils.js:15 | Rename Variable | [ ] | | A2 | 删除未使用的 `oldHandler()` | api.js:89 | Remove Dead Code | [ ] | | A3 | 提取重复的验证逻辑 | form.js:23,67 | Extract Method | [ ] | **回滚方案**:回退 A1-A3 的提交 --- ### 阶段 B:结构优化(中风险) **目标**:改善代码组织和清晰度 **预计改动**:[X 个文件,Y 个方法] **需要用户批准**:Yes **依赖**:必须先完成阶段 A | # | 任务 | 文件 | 重构手法 | 状态 | |---|------|------|----------|------| | B1 | 从长函数中提取 `calculatePrice()` | order.js:45 | Extract Method | [ ] | | B2 | 引入 `OrderDetails` 参数对象 | order.js:12 | Introduce Parameter Object | [ ] | | B3 | 将 `formatAddress()` 移动到 Address 类 | customer.js:78 | Move Method | [ ] | **回滚方案**:回滚到阶段 A 完成后的提交 --- ### 阶段 C:架构改动(高风险) **目标**:处理更深层的结构问题 **预计改动**:[X 个文件,Y 个方法] **需要用户批准**:Yes **依赖**:必须先完成阶段 A 和 B | # | 任务 | 文件 | 重构手法 | 状态 | |---|------|------|----------|------| | C1 | 用多态替换价格 switch | pricing.js:30 | Replace Conditional with Polymorphism | [ ] | | C2 | 提取 `NotificationService` 类 | user.js:100 | Extract Class | [ ] | **回滚方案**:回滚到阶段 B 完成后的提交 --- ## 详细重构步骤 ### 任务 [ID]:[任务名称] **对应异味**:[异味名称] **重构手法**:[手法名称] **风险等级**:Low / Medium / High #### 上下文 **重构前**(当前状态): ```javascript // 把当前代码贴在这里 ``` **重构后**(期望状态): ```javascript // 把期望代码贴在这里 ``` #### 逐步操作 1. [ ] **步骤 1**:[描述] - 测试:完成此步后运行测试 - 预期:所有测试通过 2. [ ] **步骤 2**:[描述] - 测试:完成此步后运行测试 - 预期:所有测试通过 3. [ ] **步骤 3**:[描述] - 测试:完成此步后运行测试 - 预期:所有测试通过 #### 验证 - [ ] 所有测试通过 - [ ] 行为未改变 - [ ] 代码可编译 - [ ] 没有新的警告 #### 提交信息 ``` refactor: [描述这次重构] ``` --- ## 进度跟踪 ### 阶段状态 | 阶段 | 状态 | 开始时间 | 完成时间 | 测试是否通过 | |------|------|----------|----------|--------------| | A | Not Started / In Progress / Done | | | | | B | Not Started / In Progress / Done | | | | | C | Not Started / In Progress / Done | | | | ### 遇到的问题 | # | 问题 | 解决方案 | 状态 | |---|------|----------|------| | 1 | [描述] | [如何解决] | Open / Resolved | --- ## 指标对比 ### 重构前 | 指标 | 文件 1 | 文件 2 | 总计 | |------|------|------|------| | 代码行数 | | | | | 圈复杂度 | | | | | 可维护性指标 | | | | | 方法数量 | | | | | 平均方法长度 | | | | ### 重构后 | 指标 | 文件 1 | 文件 2 | 总计 | 变化 | |------|------|------|------|------| | 代码行数 | | | | | | 圈复杂度 | | | | | | 可维护性指标 | | | | | | 方法数量 | | | | | | 平均方法长度 | | | | | --- ## 重构后检查清单 - [ ] 所有测试通过 - [ ] 没有新的警告或错误 - [ ] 代码成功编译 - [ ] 已完成手工验证 - [ ] 文档已更新(如需要) - [ ] 已完成代码审查 - [ ] 指标有改善 - [ ] 已获得用户签字确认 --- ## 经验总结 ### 做得好的地方 - [Item 1] - [Item 2] ### 可以改进的地方 - [Item 1] - [Item 2] ### 未来建议 - [Item 1] - [Item 2] --- ## 批准 | 角色 | 姓名 | 日期 | 签名 | |------|------|------|------| | Plan Author | | | | | Technical Lead | | | | | Product Owner | | | | --- ## 附录 ### A. 相关文档 - [相关文档链接] ### B. 参考资料 - [代码异味目录] - [重构目录] ### C. 使用的工具 - [测试框架] - [Lint 工具] - [复杂度分析工具]