1 符号和症状
2 问题根源
开始的时候类很小,随着程序增长,类膨胀了。
跟长方法一样,从心理上说,程序员通常认为,相比为新特性创建新类,把新特性放到已有类中开销更小。
3 治疗
类含有太多功能时,试着进行切分:
- 抽取类:有时候类的部分行为,可以抽取到单独的组件中。
- 抽取子类:有时候类的部分行为,可以用不同的方式实现,或者这些行为很少使用。
- 抽取接口:如果必须有一个操作或者行为列表供用户使用,则可以抽取接口。
- 如果大类用于图形接口,可以把某些数据和行为移动到单独的领域对象中。这样做的时候,可能必须要在两处存储相同数据的副本,还要保持数据一致。复制被观测的数据 是一种实现方式。
4 收益
- 重构之后,开发人员不必记住类的大量属性。
- 很多时候,把大类重构成部分可以避免重复代码和功能。