在写代码或者维护老项目时,很多人会遇到这样的问题:原来的代码堆在一起,改一处可能影响十处,头疼得很。于是有人提议做“模块化改造”——把功能拆开,各自独立。这时候就会有争论:这算不算重构?
什么是重构?
重构,简单说就是在不改变软件外部行为的前提下,调整内部结构,让代码更清晰、更容易维护。比如把一个几百行的函数拆成几个小函数,或者把重复的代码提取成公共方法,这些都属于典型的重构。
那模块化改造呢?
模块化改造,听起来像是大动作。比如原来一个 JavaScript 文件里塞满了各种功能,现在按功能拆成 user.js、order.js、utils.js 等多个文件;或者在后端把所有逻辑都放在一个类里,现在按业务拆成多个服务类。
这种拆分,本质上是在重新组织代码结构。只要没改功能,用户使用起来还是一样,那它就符合重构的核心定义。
举个生活中的例子
就像你家里的储物间,原来衣服、工具、零食全堆在一个柜子里。现在你买了几个收纳盒,按类别分开:上衣一盒,裤子一盒,螺丝刀单独放。东西还是那些,但找起来快多了。这个过程没增加新物品,只是整理了一下,和重构如出一辙。
代码示例对比
假设原来有一个处理订单的函数,又发邮件又记日志又算价格:
function handleOrder(order) {
// 计算价格
let price = order.amount * 0.9;
// 记录日志
console.log('订单创建:' + order.id);
// 发送邮件
sendEmail(order.user.email, '订单确认');
return price;
}
模块化改造后,拆成三个独立函数:
function calculatePrice(order) {
return order.amount * 0.9;
}
function logOrder(order) {
console.log('订单创建:' + order.id);
}
function notifyUser(order) {
sendEmail(order.user.email, '订单确认');
}
function handleOrder(order) {
const price = calculatePrice(order);
logOrder(order);
notifyUser(order);
return price;
}
功能没变,但每个部分职责清晰了,以后改发邮件方式,只动 notifyUser 就行,不影响其他。
所以,它是不是重构?
答案是:是的。模块化改造正是重构的一种常见形式。它不是新增功能,也不是修复 bug,而是通过拆分、归类、解耦,让代码更健壮、更易扩展。只要是“不动表象动内里”的优化,基本都算重构范畴。
当然,如果在这个过程中顺手加了新功能,比如顺便实现了订单导出 Excel,那这部分就不算重构了。但单纯的模块化拆分,毫无疑问属于重构。