《重构-改善既有代码的设计》第一版

《重构-改善既有代码的设计》一书探讨了如何识别代码中的问题,如重复代码、过长函数、大类、过长参数列表等。通过一系列重构技巧,如提取方法、提取类、引入参数对象等,改善代码设计,提高代码质量。书中强调在重构过程中确保功能不变,并提倡使用注释来解释代码目的而非解释代码本身。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

重构的前提:先构建安全网,然后在不改变功能外在行为的前提下重构。

重构的心法:旧的不变,新的创建,一步切换,旧的再见。

代码坏味道列表

有些重构手法没有包含在这份列表中。

Duplicated cod 重复代码

重构方式

  • Extract Method:同一个类中有重复代码,则提取公共函数;
  • Extract Class:如果某个类做了应该由两个类做的事情,那么创建一个新类,将相关的字段和函数从旧类搬移到新类;
  • Pull up Method:如果兄弟类中有重复代码,则提取公共函数后,再pull up method到父类;
  • Form Template Method:如果兄弟类之间只是代码类似,并非完全相同,则运用Extract Method将相似部分和差异部分分隔开,然后使用模板方法设计模式,将共同的部分放在父类中,差异部分在子类中分别实现;
  • 如果是不相关的两个类有重复的代码,那么可以抽取到第三个类中,如果放在两个类中的某个类,具体视情况而定。

Long Method过长函数

  • Extract Method:拆分成若干函数。每当感觉需要以注释来说明的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名。
  • Replace Temp With Query以查询取代临时变量:有时临时变量或表达式可能在类中的多个函数中被使用,那么此时可以将变量或者表达式抽取为了类中的查询函数,供多个函数一起使用。
  • Replace Method with Method Object以函数对象取代函数:如果有一个大型函数,其中对局部变量的使用使得无法采用Extract Method。那么就将这个函数放进一个单独对象中,此时局部变量就成了对象内的字段。然后就可以在同一个对象中将这个大型函数分解为多个小型函数。
  • Decompose Conditional分解表达式:如果有一个复杂的条件(if-then-else)语句,那么就将3个段落分别提炼为独立函数。

Large Class 大类

  • Extract Class:如果某个类做了应该由两个类做的事情,那么创建一个新类,将相关的字段和函数从旧类搬移到新类;
  • Extract subClass:如果类中的某些特征只被某些实例用到,那么就新建一个子类,将部分实例使用的特征移到子类中。
  • Extract Interface:如果有多个类使用某个类接口中的同一个子集,或者两个类的接口有部分相同,那么就将相同的子集提炼到一个独立接口中。
  • Replace Data Value with Object以对象取代数据值:如果数据项要和其他数据以及行为一起使用才有意义,那么就应该将数据项封装为对象。

Long Parameter List 过长参数列表

将参数封装成结构或者类。

  • Replace Parameter with Method以函数取代参数:对象调用某个函数,并将所得结果作为参数&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正说杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值