[3] Large Class (过大的类)

3 Large Class (过大的类)
如果想利用单个类做太多的事情, 其内往往就会出现太多实例变量. 一旦如此Duplicated Code也就接踵而至了.

你可以运用Extract Class(提炼类) 将几个变量一起提炼至新的类中. 提炼时应该选择类内彼此相关的变量. 将他们放在一起. 通常如果类内的数个变量有着相同的前缀或者字尾. 这就意味着有机会把它们提炼到某个组件中. 如果这个组件合适作为一个子类, 你会发现Extract SubClass往往比较简单.

和"太多实例变量" 一样, 类内如果太多的代码, 也是代码重复,混乱并最终走向死亡的源头. 简单是解决方案, 是把多余的东西消弥与类内部, 如果有五个"百行函数", 他们之中很多代码都相同. 那么或许你可以把它们变成五个"十行函数" 和 10个提炼出来的"双行函数"

如果代码太多也适合使用 Extract Class 和Extract Subclass. 这里有个技巧: 先确定客户端如何使用他们, 然后运用Extract Interface 为每一种使用方式提炼出一个接口. 这或许可以帮助你看清楚如何分解这个类.

如果你的Large Class是个GUI类, 你可能需要把数据和行为移到一个独立的领域对象去. 你可能需要两边各保留一些重复数据, 并保持两边同步. Duplicate Observed Data(复制"被监视数据")告诉你该怎么做. 

推荐阅读更多精彩内容