# 关于代码开发：好的重构与坏的重构

> 本文公开全文。

原文：https://utgd.net/article/20985

🔗 原文链接

在软件开发中，重构是提高代码质量的一个重要手段，但并不是每次重构都会带来积极的效果。很多开发者加入团队后，总觉得有必要大刀阔斧地重构代码，结果往往事与愿违。

很多时候，所谓的 “优化” 反而让代码变得更难理解、维护，甚至性能还下降了。通过对比好的和不好的重构方式，文章提醒我们：重构并不是什么万能的药，做之前得三思而后行。

> 这是原文中一个有趣的插图。电视剧“硅谷”第一季第六集里就有个类似的开发者角色，是一位“系统重构强迫症患者”，他刚加入就企图重构整个项目差点导致团队崩溃。这样的开发者并不受人欢迎。

首先，一个常见的误区是开发者在重构时，突然改变了整个代码的风格。比如，有人可能会把传统的命令式代码改成函数式编程风格，或者引入一堆新库（比如 Ramda）。虽然这种做法可能对一些开发者来说很吸引人，但对于不熟悉这种风格的团队成员来说，这不仅增加了学习成本，还可能让代码的维护变得更加麻烦。

好的重构应该是基于现有的风格，在保持一致性的同时，做出一些简单、直接的优化。

接着，文章也提到过度抽象化的问题。有些开发者在重构时，过于追求 “优雅” 的代码，导致引入了不必要的类和方法。结果代码变得更加复杂，逻辑也不那么清晰。其实，真正有效的重构应该是通过提取出小而简单的函数来减少复杂度，而不是增加不必要的抽象层。举个例子，本来一个简单的函数可能被拆成了多个方法，虽然看上去更模块化了，但实际上维护起来反而更麻烦了。

另一个让人头疼的重构误区是增加代码的不一致性。比如，团队在不同模块中采用不同的技术栈，或是某个组件用了一种状态管理方式，另一个用另一种。这种做法会让整个代码库变得很杂乱，开发者要在各种思维方式中切换，造成了不必要的困扰。为了避免这种情况，保持技术栈和开发风格的一致性，显得尤为重要。

而更糟糕的是，有些开发者在还没完全搞明白代码逻辑时就开始重构，结果反而破坏了原本正常工作的功能。文章举了一个例子，某开发者在不理解代码的情况下，直接删除了缓存 API 响应的代码，认为这部分是冗余的。结果，虽然代码看起来更简洁了，但性能反而变差了。这提醒我们，重构之前一定要先搞明白现有代码的目的和实现，千万不能盲目修改。

文章还指出，忽视业务需求是另一个重构的坑。举个例子，如果一个依赖 SEO 的电商网站被重构成单页面应用（SPA），可能看上去更现代化，但实际上会影响网站的加载速度和搜索引擎排名，得不偿失。重构时，开发者一定要结合业务背景来考虑技术的选择，不能光顾着追求技术的 “时髦”。

> 值得注意的是，代码确实需要重构，但必须做对。我们的代码并不完美，确实需要清理，但要确保与现有代码库保持一致，熟悉现有代码，并且在引入抽象时要有选择性。

原文中提到了一些成功重构的建议：

- 循序渐进：做小而可管理的修改，而不是一次性的大规模重写。

- 深入理解代码：在进行重大重构或引入新抽象之前，确保你已经彻底理解了现有代码。

- 保持代码风格一致：一致性是确保代码可维护性的关键。

- 避免过多抽象：除非复杂性真的需要，否则保持简单。

- 避免引入新的库，特别是那些与现有编程风格差异较大的库，除非团队达成一致。

- 在重构前写好测试，并在重构过程中持续更新测试，确保不会破坏原有功能。

- 让团队成员也遵守这些原则，确保大家都朝着同一个方向努力。

为了确保重构顺利进行，文章还推荐使用一些工具：比如 Prettier 和 Eslint 可以帮助保持代码风格的一致性，自动化测试和代码评审则可以避免引入新问题。通过这些方法，团队可以在优化代码的同时，避免掉入常见的重构误区。

> "重构并不意味着改变外部行为，而是通过优化内部结构，让代码更易于维护。" — Steve， Builder\.io 的首席执行官

原文中还有一些具体的代码示例，感兴趣的可以阅读下原文。

---

[前往标准阅读页](https://utgd.net/article/20985?audience=web)
