1 符号和症状

含有很多字段、方法、代码的类。
03 代码坏味之肿胀-2:大类 - 图1

2 问题根源

开始的时候类很小,随着程序增长,类膨胀了。
跟长方法一样,从心理上说,程序员通常认为,相比为新特性创建新类,把新特性放到已有类中开销更小。
03 代码坏味之肿胀-2:大类 - 图2

3 治疗

类含有太多功能时,试着进行切分:

  • 抽取类:有时候类的部分行为,可以抽取到单独的组件中。
  • 抽取子类:有时候类的部分行为,可以用不同的方式实现,或者这些行为很少使用。
  • 抽取接口:如果必须有一个操作或者行为列表供用户使用,则可以抽取接口。
  • 如果大类用于图形接口,可以把某些数据和行为移动到单独的领域对象中。这样做的时候,可能必须要在两处存储相同数据的副本,还要保持数据一致。复制被观测的数据 是一种实现方式。

03 代码坏味之肿胀-2:大类 - 图3

4 收益

  • 重构之后,开发人员不必记住类的大量属性。
  • 很多时候,把大类重构成部分可以避免重复代码和功能。