小王最近接手了一个老项目,打开代码一看,函数动不动就两百行,变量名叫 temp、data1、flag2,注释还写着‘这里先凑合用’——他叹了口气,默默打开了浏览器,搜‘重构计划学习资料’。
重构不是重写,是分步换血
很多人一听到‘重构’,第一反应是推倒重来。其实真正在团队里跑得稳的重构,靠的是一份清晰的重构计划:什么时候改?改哪几块?怎么验证没改坏?谁来配合测试?这些比写新功能还烧脑。
比如你发现登录模块里,校验逻辑、HTTP 请求、错误提示全挤在一个方法里。重构计划第一步可以就定成:把密码强度校验抽成独立函数。不碰网络层,不改 UI,只挪逻辑,5 分钟就能测完。
入门阶段最该盯住的三类资料
1. 代码坏味道清单
这不是玄学,是 Martin Fowler 在《重构》里总结的 20 多种典型问题。比如‘过长函数’‘重复代码’‘发散式变化’。打印出来贴在显示器边,写代码时扫一眼,就像照镜子。
2. 小步安全的重构手法库
别一上来就想‘提取微服务’。先练熟:Extract Method(提炼函数)、Rename Variable(重命名)、Replace Temp with Query(用查询取代临时变量)。每一步都能立刻运行、立刻测试。
3. 真实项目的重构日志
GitHub 上搜 refactor-log 或看一些开源项目的 PR 描述,比如 Vue 3 迁移过程中对响应式模块的逐步拆解,比教科书更直给。
举个手把手的例子
原始代码:
function calculatePrice(items) {
let total = 0;
for (let i = 0; i < items.length; i++) {
total += items[i].price * items[i].count;
if (items[i].category === 'book') {
total -= 5;
}
}
return total.toFixed(2);
}重构计划第一步:把折扣逻辑单独拎出来
function getDiscount(category) {
if (category === 'book') return 5;
return 0;
}
function calculatePrice(items) {
let total = 0;
for (let i = 0; i < items.length; i++) {
total += items[i].price * items[i].count;
total -= getDiscount(items[i].category);
}
return total.toFixed(2);
}改完立刻跑单元测试,绿了,就继续下一步。这比憋着写个‘终极重构方案文档’有用十倍。
重构计划学习资料,核心不在‘多’,而在‘可落地’。找一份带时间节点、带检查项、带回滚说明的模板,填上你手里的那个函数名、那个接口路径、那个让你皱眉的 if 块——它就活了。