设计模式之美
王争
前 Google 工程师,《数据结构与算法之美》专栏作者
123425 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 113 讲
设计模式与范式:行为型 (18讲)
设计模式之美
15
15
1.0x
00:00/00:00
登录|注册

27 | 理论一:什么情况下要重构?到底重构什么?又该如何重构?

随时随地进行
利用静态代码分析工具
控制重构影响范围
分阶段进行
提前做完善的重构计划
规范命名、规范注释、消除超大类或函数、提取重复代码
类、函数、变量等代码级别的重构
分层、模块化、解耦、抽象可复用组件
系统、模块、代码结构、类与类之间的关系
小型重构
大型重构
避免代码腐化到无可救药的地步
持续重构意识
小型重构
大型重构
练习经典设计思想
个人成长
保持代码质量
如何重构
什么时候重构
重构什么
为什么要重构
方法
时机
对象
目的
重构

该思维导图由 AI 生成,仅供参考

“重构”这个词对于大部分工程师来说都不陌生。不过,据我了解,大部分人都只是“听得多做得少”,真正进行过代码重构的人不多,而把持续重构作为开发的一部分的人,就更是少之又少了。
一方面,重构代码对一个工程师能力的要求,要比单纯写代码高得多。重构需要你能洞察出代码存在的坏味道或者设计上的不足,并且能合理、熟练地利用设计思想、原则、模式、编程规范等理论知识解决这些问题。
另一方面,很多工程师对为什么要重构、到底重构什么、什么时候重构、又该如何重构等相关问题理解不深,对重构没有系统性、全局性的认识,面对一堆烂代码,没有重构技巧的指导,只能想到哪改到哪,并不能全面地改善代码质量。
为了让你对重构有个清晰的认识,对于这部分知识的讲解,我安排了六节课的内容,主要包含以下几个方面:
对重构概括性的介绍,包括重构的目的(why)、对象(what)、时机(when)、方法(how);
保证重构不出错的手段,这里我会重点讲解单元测试和代码的可测试性;
不同规模的重构,重点讲解大规模高层次重构(比如系统、模块、代码结构、类与类之间的交互等的重构)和小规模低层次重构(类、函数、变量等的重构)。
话不多说,现在就让我们来学习第一部分内容:重构的目的、对象、时机和方法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了重构在软件开发中的重要性和实践方法。重构的目的在于改善软件内部结构,提高代码质量,而不改变其可见行为。重构的对象包括大规模高层次重构和小规模低层次重构,分别涉及系统、模块、代码结构等顶层设计和类、函数、变量等代码细节的优化。重构的时机强调持续重构,将其作为开发的一部分,以保证代码质量不断提升,避免代码腐化到无法挽回的地步。文章强调了持续重构意识的重要性,指出重构不仅是对代码质量的保证,也是工程师技术成长和能力展示的重要手段。同时,重构能够避免过度设计,为未来需求变化留下灵活性,对工程师个人成长和成就感也有积极影响。总之,本文为工程师提供了清晰的认识和实践指导,强调了持续重构意识的重要性,为读者提供了重要的技术指导和实践价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(186)

  • 最新
  • 精选
  • brianhuuu
    重构最难的还是领导不支持

    作者回复: 😂

    2020-01-03
    38
    437
  • 编程界的小学生
    我自从入职到现在一直都是维护老项目。“我很怀念我自己写的代码。",为什么加双引号了?因为现在的项目代码跟屎一样臭,我自己写的只能说尽量写好点,但是也不完美,完全达不到我心中的目标。为什么呢?因为大环境所致。现在项目已经烂的一P了,结果还没时间给重构的机会。难受的亚匹。我所谓的烂不只是代码烂,就连无用代码也不删掉,都注释掉,git提交comment:123,345,代码开发完不合并到master。这篇文章不是学知识的,是比惨的...... 另外,精选留言越来越少,难受。

    作者回复: 😂

    2020-01-03
    6
    8
  • 技术修行者
    我觉得在工作中做好重构,需要有以下几点准备: 1. 领导支持,如果领导不支持,可以试着从非功能需求以及降低运维成本的角度去说服。 2. 重构是渐进迭代的,不是一步到位的。 3. 重构需要有测试用例支撑,没有完善的测试覆盖就去重构,无异于给自己挖坑。 4. 重构需要code review,这不仅是为了保证代码质量,也是很好的团队内技术分享的机会。

    作者回复: ������

    2020-11-24
    2
    2
  • 骆永良
    不管是重构,开始开发设计,都是为了让代码粒度适中,在理解的范围内。

    作者回复: 嗯呢������

    2020-11-16
    1
  • Pp、x
    有时候确实是想重构,边开发边重构,那么也需要测试重新测一下之前改动过的逻辑,这成本不是很高吗?而且测试也不一定会配合你的代码重构而重复去测试。

    作者回复: 你说的没错,知易行难

    2020-08-10
    1
  • 逍遥思
    编程世界也存在热力学第二定律,在自然过程中,熵总是不断增加的。 我自己有一个小项目,随着代码量的逐渐增多,维护起来越来越吃力,用来提防出问题的精力已经超过了开发新功能的精力,所以看到这个专栏时我毫不犹豫就买了。重构我的项目就是我给自己的大作业。 不过,真的不想写单元测试啊😭😭😭

    作者回复: 单元测试真的很有用,谁写谁知道。

    2020-01-03
    3
    1
  • 一壶浊酒
    就拿我们公司的系统来说,之前两个团队开发整合,就是因为没有进行好的规范,并且没有进行持续重构,再加上人员的走动,导致之后的人在接手的时候碰到新的需求,也不知道是否有可复用的代码,就直接再写新的接口,最终导致整个系统变得异常笨重,重复的接口越来越多。后来因为要迁移部署环境,进行了一次大型的重构,公司安排了新来的员工来负责,结果业务不熟悉,也就只能按照新部署要求,做了一些简单的调整,代码依旧越来越复杂,所以我觉得持续重构的意识真的很重要,看了争哥的专栏之后,赶紧对以前的代码重新再优化一遍

    作者回复: 加油~

    2020-01-04
  • 堵车
    数据库字段乱复用,对话数据和操作数据放同一个表,接口耦合,大量doEveryThing方法,命名几乎看不懂,层级循环调用。节后要作为公司重点规划的项目去做,五个人一年的开发量。我心里慌得一逼!这种项目是不是该重写了?

    作者回复: 先重构练练手吧,实在不行再重写。

    2020-01-03
  • Frode
    我也是像改以前的垃圾代码,进行重构,但现在我们项目中没有单元测试,有点不敢做太多的改动,怕影响功能,是不是重构后需要测试进行一下测试?我只能在修改功能的时候忍不住小重构一下,这样我也不怕引来bug,本来也要测试←_←

    作者回复: 重构之后 不管有没有单元测试,都要让测试人员重新测试一把,不然风险太大了,一旦出问题,会被打3.25的😂

    2020-01-03
  • 刘大明
    前段时间刚重构了一个功能模块。该模块可以说是祖传代码。里面堆砌着各种判断条件,就是所谓的箭头型代码。我接手这个功能重构的 1.把代码读一遍和跑一遍,理解里面的需求。尽量画一个流程图。 2.建立防护网。将需求拆分之后,针对每个拆分的业务点写单元测试。 4.开始重构,解耦逻辑,设计方法的时候尽量让职业单一,类与类之间尽量符合迪米特原则,有依赖关系的类尽量只依赖类的特定方法。我觉得比较基础也是比较重要一点。不要有重复代码。命名要规范,类的各个职业要清晰。重构过程中,其实也要时不时的识别代码的坏味道。尽然是重构,那么肯定要比不重构之前肯定要更好。 5.重构完成之后,通过防护网的测试。 当天重构代码上线之后,基本上没有问题。运行了几天之后有一小段逻辑隐藏的比较深没有写这个逻辑测试,后面补上了一直都没有出过问题了。还是比较稳定的。 我这里只是做了中小规模的重构,后面跟着小争哥继续系统的学习大规模重构,以及重构的技巧和思想。
    2020-01-03
    5
    255
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部