27 | 理论一:什么情况下要重构?到底重构什么?又该如何重构?
王争
该思维导图由 AI 生成,仅供参考
“重构”这个词对于大部分工程师来说都不陌生。不过,据我了解,大部分人都只是“听得多做得少”,真正进行过代码重构的人不多,而把持续重构作为开发的一部分的人,就更是少之又少了。
一方面,重构代码对一个工程师能力的要求,要比单纯写代码高得多。重构需要你能洞察出代码存在的坏味道或者设计上的不足,并且能合理、熟练地利用设计思想、原则、模式、编程规范等理论知识解决这些问题。
另一方面,很多工程师对为什么要重构、到底重构什么、什么时候重构、又该如何重构等相关问题理解不深,对重构没有系统性、全局性的认识,面对一堆烂代码,没有重构技巧的指导,只能想到哪改到哪,并不能全面地改善代码质量。
为了让你对重构有个清晰的认识,对于这部分知识的讲解,我安排了六节课的内容,主要包含以下几个方面:
对重构概括性的介绍,包括重构的目的(why)、对象(what)、时机(when)、方法(how);
保证重构不出错的手段,这里我会重点讲解单元测试和代码的可测试性;
不同规模的重构,重点讲解大规模高层次重构(比如系统、模块、代码结构、类与类之间的交互等的重构)和小规模低层次重构(类、函数、变量等的重构)。
话不多说,现在就让我们来学习第一部分内容:重构的目的、对象、时机和方法。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了重构在软件开发中的重要性和实践方法。重构的目的在于改善软件内部结构,提高代码质量,而不改变其可见行为。重构的对象包括大规模高层次重构和小规模低层次重构,分别涉及系统、模块、代码结构等顶层设计和类、函数、变量等代码细节的优化。重构的时机强调持续重构,将其作为开发的一部分,以保证代码质量不断提升,避免代码腐化到无法挽回的地步。文章强调了持续重构意识的重要性,指出重构不仅是对代码质量的保证,也是工程师技术成长和能力展示的重要手段。同时,重构能够避免过度设计,为未来需求变化留下灵活性,对工程师个人成长和成就感也有积极影响。总之,本文为工程师提供了清晰的认识和实践指导,强调了持续重构意识的重要性,为读者提供了重要的技术指导和实践价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》,新⼈⾸单¥98
《设计模式之美》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(186)
- 最新
- 精选
- brianhuuu重构最难的还是领导不支持
作者回复: 😂
2020-01-0338437 - 编程界的小学生我自从入职到现在一直都是维护老项目。“我很怀念我自己写的代码。",为什么加双引号了?因为现在的项目代码跟屎一样臭,我自己写的只能说尽量写好点,但是也不完美,完全达不到我心中的目标。为什么呢?因为大环境所致。现在项目已经烂的一P了,结果还没时间给重构的机会。难受的亚匹。我所谓的烂不只是代码烂,就连无用代码也不删掉,都注释掉,git提交comment:123,345,代码开发完不合并到master。这篇文章不是学知识的,是比惨的...... 另外,精选留言越来越少,难受。
作者回复: 😂
2020-01-0368 - 技术修行者我觉得在工作中做好重构,需要有以下几点准备: 1. 领导支持,如果领导不支持,可以试着从非功能需求以及降低运维成本的角度去说服。 2. 重构是渐进迭代的,不是一步到位的。 3. 重构需要有测试用例支撑,没有完善的测试覆盖就去重构,无异于给自己挖坑。 4. 重构需要code review,这不仅是为了保证代码质量,也是很好的团队内技术分享的机会。
作者回复: ������
2020-11-2422 - 骆永良不管是重构,开始开发设计,都是为了让代码粒度适中,在理解的范围内。
作者回复: 嗯呢������
2020-11-161 - Pp、x有时候确实是想重构,边开发边重构,那么也需要测试重新测一下之前改动过的逻辑,这成本不是很高吗?而且测试也不一定会配合你的代码重构而重复去测试。
作者回复: 你说的没错,知易行难
2020-08-101 - 逍遥思编程世界也存在热力学第二定律,在自然过程中,熵总是不断增加的。 我自己有一个小项目,随着代码量的逐渐增多,维护起来越来越吃力,用来提防出问题的精力已经超过了开发新功能的精力,所以看到这个专栏时我毫不犹豫就买了。重构我的项目就是我给自己的大作业。 不过,真的不想写单元测试啊😭😭😭
作者回复: 单元测试真的很有用,谁写谁知道。
2020-01-0331 - 一壶浊酒就拿我们公司的系统来说,之前两个团队开发整合,就是因为没有进行好的规范,并且没有进行持续重构,再加上人员的走动,导致之后的人在接手的时候碰到新的需求,也不知道是否有可复用的代码,就直接再写新的接口,最终导致整个系统变得异常笨重,重复的接口越来越多。后来因为要迁移部署环境,进行了一次大型的重构,公司安排了新来的员工来负责,结果业务不熟悉,也就只能按照新部署要求,做了一些简单的调整,代码依旧越来越复杂,所以我觉得持续重构的意识真的很重要,看了争哥的专栏之后,赶紧对以前的代码重新再优化一遍
作者回复: 加油~
2020-01-04 - 堵车数据库字段乱复用,对话数据和操作数据放同一个表,接口耦合,大量doEveryThing方法,命名几乎看不懂,层级循环调用。节后要作为公司重点规划的项目去做,五个人一年的开发量。我心里慌得一逼!这种项目是不是该重写了?
作者回复: 先重构练练手吧,实在不行再重写。
2020-01-03 - Frode我也是像改以前的垃圾代码,进行重构,但现在我们项目中没有单元测试,有点不敢做太多的改动,怕影响功能,是不是重构后需要测试进行一下测试?我只能在修改功能的时候忍不住小重构一下,这样我也不怕引来bug,本来也要测试←_←
作者回复: 重构之后 不管有没有单元测试,都要让测试人员重新测试一把,不然风险太大了,一旦出问题,会被打3.25的😂
2020-01-03 - 刘大明前段时间刚重构了一个功能模块。该模块可以说是祖传代码。里面堆砌着各种判断条件,就是所谓的箭头型代码。我接手这个功能重构的 1.把代码读一遍和跑一遍,理解里面的需求。尽量画一个流程图。 2.建立防护网。将需求拆分之后,针对每个拆分的业务点写单元测试。 4.开始重构,解耦逻辑,设计方法的时候尽量让职业单一,类与类之间尽量符合迪米特原则,有依赖关系的类尽量只依赖类的特定方法。我觉得比较基础也是比较重要一点。不要有重复代码。命名要规范,类的各个职业要清晰。重构过程中,其实也要时不时的识别代码的坏味道。尽然是重构,那么肯定要比不重构之前肯定要更好。 5.重构完成之后,通过防护网的测试。 当天重构代码上线之后,基本上没有问题。运行了几天之后有一小段逻辑隐藏的比较深没有写这个逻辑测试,后面补上了一直都没有出过问题了。还是比较稳定的。 我这里只是做了中小规模的重构,后面跟着小争哥继续系统的学习大规模重构,以及重构的技巧和思想。2020-01-035255
收起评论