Day 6: 重构代码
让老代码焕然一新,提升可读性和维护性。
识别重构时机
代码异味信号
- 一个函数超过 50 行
- 相同逻辑重复多次
- 嵌套层级太深
- 变量名不明确
- 难以理解的复杂逻辑
什么时候重构
你:这个文件已经 500 行了,帮我拆分一下
你:这段逻辑在 3 个地方都有,能抽取成公共函数吗
你:这个组件做的事情太多了,怎么拆分?
函数重构
拆分大函数
// 重构前:一个函数做太多事
function handleUserSubmit(formData) {
// 50+ 行代码...
}
你:这个函数太长了,帮我按职责拆分成几个小函数
Claude 会拆分成:
function validateUserData(formData) { /* ... */ }
function saveUserToDB(userData) { /* ... */ }
function sendWelcomeEmail(user) { /* ... */ }
function handleUserSubmit(formData) {
const validData = validateUserData(formData);
const user = saveUserToDB(validData);
sendWelcomeEmail(user);
}
提取重复代码
你:这几个函数都有相似的错误处理逻辑,帮我提取出来
优化嵌套结构
你:这个 if-else 嵌套太深了,用早期返回优化一下
组件重构
拆分大组件
你:这个 UserDashboard 组件太复杂了,帮我拆分成几个子组件
Claude 会创建:
- UserProfile 组件
- UserStats 组件
- UserActivity 组件
- UserSettings 组件
提取自定义 Hook
你:这个组件里的数据获取逻辑很常用,提取成 useUserData Hook
优化 Props 传递
你:这个组件的 props 太多了,用 Context 或者对象传递优化一下
代码结构重构
文件组织
你:这个项目文件结构有点乱,帮我按功能重新组织
导入导出优化
你:统一这个项目的导入导出方式,用 barrel exports
配置文件整理
你:把分散的配置项统一到 config 文件夹
性能重构
React 性能优化
你:这个列表组件重渲染太频繁,用 memo 和 useMemo 优化
减少打包体积
你:按需导入 lodash 函数,不要导入整个库
懒加载优化
你:给路由组件添加懒加载,减少首屏加载时间
数据结构重构
状态管理优化
你:这个 Redux store 结构不合理,帮我重新设计
API 数据处理
你:统一处理 API 响应数据的格式转换
缓存策略
你:给频繁请求的数据添加缓存机制
重构步骤
1. 先写测试
你:重构前先给这些函数写测试,确保重构后行为不变
2. 小步重构
你:一次只重构一个函数,不要大改
3. 验证功能
你:重构完运行测试,确保功能正常
常见重构场景
移除重复代码
// 重构前
function createUser(data) {
if (!data.email) throw new Error('Email required');
if (!data.name) throw new Error('Name required');
// ...
}
function updateUser(data) {
if (!data.email) throw new Error('Email required');
if (!data.name) throw new Error('Name required');
// ...
}
你:这两个函数的验证逻辑重复了,提取成公共函数
简化条件语句
你:这个复杂的 if-else 能用策略模式或者 switch 简化吗?
改善命名
你:这些变量名 a, b, temp, data 不够清晰,帮我改成有意义的名字
减少参数传递
你:这个函数有 8 个参数,用对象参数简化一下
重构工具
自动格式化
你:用 Prettier 统一代码格式
静态分析
你:用 ESLint 检查代码质量问题
类型检查
你:给这个 JS 项目添加 TypeScript,逐步迁移
重构原则
保持功能不变
重构 = 改善代码结构,但不改变外部行为
小步快跑
一次改一点,频繁测试,避免一次性大改
有测试保护
重构前先有测试,重构后验证测试通过
重构心得:好代码不是一次写出来的,都是重构出来的。别怕改代码,改得越多越熟练。
第二阶段完成! 恭喜你掌握了实战开发技能。接下来进入进阶阶段,学习更复杂的项目开发。
下一步
Day 7: 项目初始化 - 从零搭建项目脚手架
练习建议:
- 找一个老项目,挑几个函数重构一下
- 试试拆分一个复杂组件
- 体验一下重构前后代码的可读性差异