过大的类
你可以运用Extract Class将几个变量一起提炼至新类内。提炼时应该选择类内彼此相关的变量,将它们放在一起。例如depositAmount和depositCurrency可能应该隶属同一个类。通常如果类内的数个变是有着相同的前缀或字尾,这就意味有机会把它们提炼到某个组件内。如果这个组件适合作为一个子类,你会发现Extract Subclass往往比较简单。
有时候类并非在所有时刻都使用所有实例变量。果真如此,你或许可以多次使用Extract Class或Extract Subclass。
和 “太多实例变量” 一样,类内如果有太多代码,也是代码重复、混乱并最终走向死亡的源头。最简单的解决方案是把多余的东西消弭于类内部。如果有五个“百行函数”,它们之中很多代码都相同,那么或许你可以把它们变成五个“十行函数”和十个提炼出来的“双行函数”。
和“拥有太多实例变量”一样,一个类如果拥有太多代码,往往也适合使用Extract Class和Extract Subclass。这里有个技巧:先确定客户端如何使用它们,然后运用为每一 种使用方式提炼出一个接口。这或许可以帮助你看清楚如何分解这个类。
如果你的Large Class是个GUI类,你可能需要把数据和行为移到一个独立的领域对象去。你可能需要两边各保留一些重复数据,并保持两边同步。Duplicate Observer Data告诉你该怎么做。这种情况下,特别是如果你使用旧式的AWT组件,你可以采用这种方式去掉GUI类并代以Swing组件。