代码的坏味道之三 :Large Class(过大类)
2013-05-02 13:40
330 查看
如果想利用单一class做太多事情,其内往往就会出现太多instance变量。一旦如此,Duplicated Code(重复代码)也就接踵而至了。
你可以运用Extract Class将数个变量一起提炼至新class内。提炼时应该选择class内彼此相关的变量,将它们放在一起。例如"depositAmount"和 "depositCurrency"可能应该隶属同一个class。通常如果class内的数个变量有着相同的前缀或字尾,这就意味有机会把它们提炼到某个组件内。如果这个组件适合作为一个subclass,你会发现Extract Subclass(提炼子类)往往比较简单。
有时候class并非在所有时刻都使用所有instance变量。果真如此,你或许可以多次使用Extract Class(提炼类)或Extract Subclass(提炼子类)。
和「太多instance变量」一样,class内如果有太多代码,也是「代码重复、混乱、死亡」的绝佳滋生地点。最简单的解决方案(还记得吗,我们喜欢简单的解决方案)是把赘余的东西消弭于class内部。如果有五个「百行函数」,它们之中很多代码都相同,那么或许你可以把它们变成五个「十行函数」和十个提炼出来的「双行函 数」。
和「拥有太多instance变量」一样,一个class如果拥有太多代码,往往也适合使用Extract Class(提炼类)和Extract Subclass(提炼子类)。这里有个有用技巧:先确定客户端如何使用它们,然后运用Extract Interface(提炼接口)为每一种使用方式提炼出一个接口。这或许可以帮助你看清楚如何分解这个class。
如果你的Large class是个GUI class,你可能需要把数据和行为移到一个独立的领域对象(domain objec)去。你可能需要两边各保留一些重复数据,并令这些数据同步(sync.)。Duplicate Observed Data(复制「被监视数据」)告诉你该怎么做。这种情况下,特别是如果你使用旧式Abstract Windows Toolkit (AWT)组件,你可以采用这种方式去掉GUI
class并代以Swing组件。
你可以运用Extract Class将数个变量一起提炼至新class内。提炼时应该选择class内彼此相关的变量,将它们放在一起。例如"depositAmount"和 "depositCurrency"可能应该隶属同一个class。通常如果class内的数个变量有着相同的前缀或字尾,这就意味有机会把它们提炼到某个组件内。如果这个组件适合作为一个subclass,你会发现Extract Subclass(提炼子类)往往比较简单。
有时候class并非在所有时刻都使用所有instance变量。果真如此,你或许可以多次使用Extract Class(提炼类)或Extract Subclass(提炼子类)。
和「太多instance变量」一样,class内如果有太多代码,也是「代码重复、混乱、死亡」的绝佳滋生地点。最简单的解决方案(还记得吗,我们喜欢简单的解决方案)是把赘余的东西消弭于class内部。如果有五个「百行函数」,它们之中很多代码都相同,那么或许你可以把它们变成五个「十行函数」和十个提炼出来的「双行函 数」。
和「拥有太多instance变量」一样,一个class如果拥有太多代码,往往也适合使用Extract Class(提炼类)和Extract Subclass(提炼子类)。这里有个有用技巧:先确定客户端如何使用它们,然后运用Extract Interface(提炼接口)为每一种使用方式提炼出一个接口。这或许可以帮助你看清楚如何分解这个class。
如果你的Large class是个GUI class,你可能需要把数据和行为移到一个独立的领域对象(domain objec)去。你可能需要两边各保留一些重复数据,并令这些数据同步(sync.)。Duplicate Observed Data(复制「被监视数据」)告诉你该怎么做。这种情况下,特别是如果你使用旧式Abstract Windows Toolkit (AWT)组件,你可以采用这种方式去掉GUI
class并代以Swing组件。
相关文章推荐
- 代码的坏味道03:过大的类(Large Class)
- 【整理】【代码的坏味道】过大类(Large Class)
- 坏味道之3 过大类 & Extract class & Move Method & Encapsulate Field & Self Encapsulate Field
- 3.3 large class(过大的类)
- Refactoring之——代码的坏味道(二)过大的类 &(三)基本类型偏执
- 代码的坏味道之二十 :Data Class(纯稚的数据类)
- 转:代码的坏味道之二十 :Data Class(纯稚的数据类)或POJO
- 代码坏的味道12:冗赘类(Lazy Class)
- 重构 之 总结代码的坏味道 Bad Smell (一) 重复代码 过长函数 过大的类 过长参数列 发散式变化 霰弹式修改
- 代码的坏味道之十二 :Lazy Class(冗赘类)
- 【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)
- 【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)
- Large Class--过大的类--要重构的信号
- 代码坏的味道20:纯稚的数据类 (Data Class)
- 代码坏味道之过大的类
- 代码坏的味道19:不完美的库类 (Incomplete Library Class)
- Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密
- 【软件架构】七款代码味道识别工具
- 代码的坏味道之四 ——译自《重构》
- (转)Python_Class总结(试验Markdown发图和代码)