加餐 | 你真的了解重构吗?
郑晔
该思维导图由 AI 生成,仅供参考
今天(3 月 15 日),Martin Fowler 《重构》第二版的中文版正式发布。前不久,人邮的杨海灵老师找到我,让我帮忙给这本书写推荐语,我毫不犹豫地就答应了,有机会为经典之作写推荐语,实属个人荣幸。
不过,我随即想到,在专栏里,我只是在谈 TDD 的时候提到了重构,并没有把它作为一个专门的话题来讲,于是,我决定给我的专栏读者加餐,专门谈谈重构,毕竟重构是几乎每个程序员都会用到的词汇。但你真的了解重构吗?
每个程序员都要做的事
作为程序员,我们都希望自己的代码是完美的。但没有代码是完美的,因为只要你的代码还有生命力,一定会有新的需求进来,而新的需求常常是你在编写这段代码之初始料未及的。
很多人直觉的选择是,顺着既有的代码结构继续写下去,这里添一个 if,那里加一个标记位,长此以往,代码便随时间腐坏了。
如果用一个物理学术语描述这种现象,那就是“熵增”,这也就是大名鼎鼎的热力学第二定律。如果没有外部干预,系统会朝着越来越混乱的方向发展。对抗熵增的一个办法就是引入负熵,让系统变得更加有序。而在代码中引入负熵的过程就是“重构”。
调整代码这件事是程序员都会有的习惯,但把这件事做到比较系统,上升为“重构”这个值得推广的实践是从一个小圈子开始的,这个小圈子的核心就是我们在专栏里前面提到过的两位大师级程序员:Ward Cunningham 和 Kent Beck。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
重构是程序员日常工作中不可或缺的一部分,通过微操作改善现有代码的设计。Martin Fowler的《重构》深入阐述了重构的意义和实践方法。重构不是简单的代码调整,而是需要将调整代码的动作分解成一个个重构小动作,逐步完成。这种微操作的方式能够帮助程序员更好地理解和应用各种重构手法,避免大规模修改带来的风险。理解重构的真正含义和掌握微操作的能力对于程序员来说至关重要。重构的知识地图围绕着Martin Fowler的定义展开,需要对软件的内部结构进行调整,以提高可理解性,降低修改成本。重构需要保持软件的可观察行为不变,通常需要测试来验证。此外,重构与任务分解、TDD、设计模式和Clean Code等知识有关联,需要综合学习。重构的核心是微操作和分解,需要大量的锤炼和练习。读者应该牢记锤炼重构技能的重要性。整体而言,重构是一个需要深入理解和不断实践的技术,对于软件工匠来说至关重要。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《10x 程序员工作法》,新⼈⾸单¥68
《10x 程序员工作法》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(42)
- 最新
- 精选
- 非鱼函数式编程有什么推荐书籍吗?
作者回复: 有几本可以了解一下,《计算机程序的解释与构造》(Structure and Interpretation of Computer Programs,SICP),还有《Haskell 趣学指南》(Learn You a Haskell for Great Good!),《函数式编程思维》(Functional Thinking)。
2019-03-1537 - 旭东(Frank)重构是“改革”,重写是“改朝”
作者回复: 这个比喻…有点道理
2019-04-0327 - 行与修重构不仅是愿景(名词),也不仅是行为(动词),还应该成为程序员必备的习惯和工作方式。但要成为习惯,甚至是深入骨髓的那种,是需要有积极意识和大量联系的。 有程序员会说,先把功能实现了,后面我再去重构,但后来的情况往往是不重构,或是债务过多重构代价太大,原因也大多是之前课程中提到的诸如任务分解不到位,微操作缺失,缺乏合理有效的单元测试等等,所以程序员的自我修养也是要体系化的,所谓功到自然成。与诸君共勉之!
作者回复: 观察和解释都很到位。
2019-03-1715 - 丁丁历险记讲个段子,身为公司首架(自己封的) 我和其他开发人员的最根基差别就在于重构。
作者回复: 心疼你
2019-11-1713 - zapup维护别人的“旧代码”,可以从重构开始。
作者回复: 重构,从理解重构开始。
2019-03-2412 - 丁丁历险记分享里面一句对我影响很大的话, 将意图与实现分离。
作者回复: 共勉
2019-11-179 - 码农Kevin亮一直以为重构是要重新调整结构。学习了任务分解的概念才知道原来我一直在重写
作者回复: 恭喜你认清了一个概念
2019-08-298 - 下个目标45k重构是手段,单元测试是后盾,消除代码坏味道则是目的
作者回复: 目的是代码更具可维护性,能够长期发展。
2020-11-1726 - Victor重构应该是一个可持续发展的过程,阶段性的就要复盘改善代码,还有每次添加新功能的时候都是重构的合适时机;否则长期不做发展下去就会很难重构,因为害怕破坏原有的逻辑,重构的风险也会增加。
作者回复: 你说得非常对,添加新功能都是重构的时机。今天不重构,明天就重构不动了。
2020-05-095 - 小钟买了十来个专栏从来没有写过留言,读到这里很认同之前看过的几个留言,郑老师的这个专栏是看过对我帮助最大的一个,可以用高级来形容,将软件工程,agile,,精益创业的一些概念结合的很好,谢谢老师。
作者回复: 你有收获,我很欣慰。
2019-06-295
收起评论