代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

时间:2021-06-23 02:22:17

坏味道——夸夸其谈未来性(Speculative Generality)

特征

存在未被使用的类、函数、字段或参数。

代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

问题原因

有时,代码仅仅为了支持未来的特性而产生,然而却一直未实现。结果,代码变得难以理解和维护。

解决方法

  • 如果你的某个抽象类其实没有太大作用,请运用 折叠继承体系(Collapse Hierarch)

代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

  • 不必要的委托可运用 将类内联化(Inline Class) 消除。
  • 无用的函数可运用 内联函数(Inline Method) 消除。
  • 函数中有无用的参数应该运用 移除参数(Remove Parameter) 消除。
  • 无用字段可以直接删除。

收益

  • 减少代码量。
  • 更易维护。

何时忽略

  • 如果你在一个框架上工作,创建框架本身没有使用的功能是非常合理的,只要框架的用户需要这个功能。
  • 删除元素之前,请确保它们不在单元测试中使用。如果测试需要从类中获取某些内部信息或执行特殊的测试相关操作,就会发生这种情况。

重构方法说明

折叠继承体系(Collapse Hierarchy)

问题

超类和子类之间无太大区别。

代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

解决

将它们合为一体。

代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

将类内联化(Inline Class)

问题

某个类没有做太多事情。

代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

解决

将这个类的所有特性搬移到另一个类中,然后移除原类。

代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

内联函数(Inline Method)

问题

一个函数的本体比函数名更清楚易懂。

class PizzaDelivery {
  //...
  int getRating() {
    return moreThanFiveLateDeliveries() ? 2 : 1;
  }
  boolean moreThanFiveLateDeliveries() {
    return numberOfLateDeliveries > 5;
  }
}

解决

在函数调用点插入函数本体,然后移除该函数。

class PizzaDelivery {
  //...
  int getRating() {
    return numberOfLateDeliveries > 5 ? 2 : 1;
  }
}

移除参数(Remove Parameter)

问题

函数本体不再需要某个参数。

代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

解决

将该参数去除。

代码的坏味道(17)——夸夸其谈未来性(Speculative Generality)

引申阅读

欢迎继续阅读 代码的症与药 系列文章。