重构速查表

重构的相关技能
帅旋
关注
充电
IT宅站长,技术博主,共享单车手,全网id:arthinking。

代码的坏味道:可有可无的代码

发布于 2019-03-08 | 更新于 2024-02-23

可丢弃项是指那些无意义且不需要的东西,其缺席会使代码更加干净、高效和易于理解。

1 重复代码(Duplicated Code)

需要采用 Extract Method 提炼出重复的代码。

如果同一个继承体系下的两个兄弟子类有相同代码,则使用 Extract Method(提炼函数) 提炼重复代码,然后使用 Pull Up Method(函数上移) 将它推入超类中。

如果代码类似,但并非完全相同,则可以御用 Extract Method(提炼函数) 将想死部分和差异部分分开,构成单独一个函数。然后运用Form Template Method(塑造模板函数) 获得一个 Template Method(模板方法) 设计模式。

如果有些函数以不同的算法做相同的事,可以选择其中一个较清晰的,使用 Substitute Algorithm(替换算法) 将其他函数的算法替换掉。

如果两个毫不相关的类出现 Duplicated Code ,应该考虑使用 Extract Class(提炼类) 将重复代码提炼到一个独立类中。但是,重复代码所在函数也可能是属于某个类,另一个类智能调用它,或者这个函数属于第三个类。需要根据具体情况决定把类放在哪里。

2 过多的注释(Comments)

  • 如果需要注释来解释一段代码块做什么,试试Extract Method(提炼方法)
  • 如果函数已经提炼出来,但还需要注释,试试Rename Method(函数改名)
  • 如果需要注释说明某些系统的需求规格,试试Introduce Assertion(引入断言)

当你感觉需要撰写注释时,请先尝试重构,试着让所有注释都变得多余。

注释的用处:

  • 当你不知道该做什么时,可以写注释;
  • 注释还可以用来标记你并无十足把握的区域。

3 夸夸其谈未来性(Speculative Generality)

  • 如果你的某个抽象类其实没有太大作用,请运用Collapse Hierarchy(折叠继承体系)
  • 不必要的委托可以运用Inline Class(将类内联化)除掉;
  • 函数的某些参数未被用上,可以实施Remove Parameter(移除参数)
  • 如果函数名有多余的抽象意味,可以实施Rename Method(函数改名)

4 纯粹的数据类(Data Class)

对于纯粹的数据类,属性不能为public字段,如果有,需要用Encapsulate Field(封装字段)封装起来。对于里面的容器类也类型,如果没有封装,尝试用Encapsulate Collection(封装集合)把它们封装起来。如果属性不允许被修改,请使用Remove Setting Method(移除设值函数)

找出取值/设值函数被调用的地方,尝试以Move Method(搬移函数),把那些调用行为搬移到Data Class来。如果无法搬移,则用Extract Method(提炼函数)产生一个可被搬移的函数。不久之后就可以用Hide Method(隐藏函数)把这些取值/设值函数隐藏起来了。

Data Class就像一个小孩,作为一个面向对象的起点很好,当腰让它们想成熟的对象那样参与整个系统,就必须承担一定责任。

5 冗赘类(Lazy Class)

如果某些子类没有做足够的工作,试试Collapse Hierarchy(折叠继承体系)。对于几乎没用的组件,应该以Inline Class(将类内联化)对付他们。

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/refactoring/code-small-dispensable.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。