重构 重构坏味道:重复代码

admin · 2020年12月31日 · 最后由 strongant 回复于 2021年01月10日 · 24 次阅读
本帖已被设为精华帖!

重复代码

症状

坏味道中首当其冲的就是重复代码,如果看到两段 (或更多) 代码结构差不多或完全相同,那么这个坏味道就可以确定了。想办法消除掉。

病因

重复代码通常发生在多个程序员同时在同一个程序的不同部分上工作时。由于他们正在处理不同的任务,他们可能不知道其它同事已经写了类似的代码。 当代码的使用不同的算法却执行相同的工作时,这是更微妙的重复。这种重复可能很难找到和修复。 有时重复是有目的的,当急于按时完成工作,现有的代码几乎是正确的时候,新手程序员可能无法抵制复制和粘贴相关代码的诱惑。而且在某些情况下,程序员懒得去处理这种混乱的代码。

导致的健康问题

假设重复的代码足够的稳定,百年不变,这样的重复也许不会带来问题。但是软件是可塑性极强的工程实践,最不稳定的也是需求变化,那么你就要花时间去修改所有包含重复逻辑的代码,这样无形中增加了维护成本和发生 bug 的几率。

治疗

利用 Extract Method 提炼重复代码,然后引用新提炼的函数

  • 提炼重复代码的过程可能会用到 Extract Variable 提炼相同的局部变量

利用 Extract Method 提炼重复代码,然后将重复代码通过 Pull Up Method 推到超类

一般常见相似的两个函数以相同的顺序执行大致的操作,但是各操作不完全相同。
利用 Extract Method 提炼重复代码,过程中可能发现可以运用From Template Method【Template Method 设计模式】

利用 Substitute Algorithm 将其他函数替换掉

利用 Extract Class 将重复代码提炼到一个独立的新类中,然后引用新类,或者这个函数就是属于原来的某个类,那么可能就不是互不相干的类之间的引用了

什么情况不治疗

如果合并了两段重复代码,反而使得可读性变差了,并且不如原来直观了。

「软件匠艺社区」旨在传播匠艺精神,通过分享好的「工作方式」,让帮助程序员更加快乐高效地编程!

admin 将本帖设为了精华贴 01月04日 00:40
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册