ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
如果想利用单一class做太多事情,其内往往就会出现太多instance变量。一旦如此,Duplicated Code也就是接踵而至了。

你可以运用Extract Class(149)将数个变量一起提炼 至新class内。提炼时应该选择class内彼此相关的变量,将它们放在一起。例如“depositAmount”和 “depositCurrency”可能应该隶属同一个class。通常如果class内的数个变量有着相同的前缀或字尾,这就意味有机会把它们提炼到某 个组件内。如果这个组件适合作为一个subclass,你会发现Extract Subclass(330)往往比较简单。

有时候class并非在所有时刻都使用所有instance变量。果真如此,你或许可以多次使用Extract Class(149)或Extract Subclass(330)。

和[太多instance变量]一样,class内如果有太多代码,也是[代码重复、混乱、死亡]的绝佳滋生地点。最简单的解决方案(还记得吗,我们喜欢 简单的解决)是把赘余的东西消弭于class内部。如果有五个[百行函数],它们之中很多代码都相同,那么或许你可以把它们变成五个[十行函数]和十个提 炼出来的[双行函数]。

和[拥有太多instance变量]一样,一个class如果拥有太多代码,往往也适合使用Extract Class(149)和Extract Subclass(330)。这里有个有用技巧:先确定客户端如何使用它们,然后运用Extract Interface(341)为每一种使用方法提炼出一个接口。这或许可以帮助你看清楚如何分解这个class。

如果你的Large Class是个GUI class,你可能需要把数据和行为移到一个独立的领域对象(domain object)去。你可能需要两边各保留一些重复数据,并令这些数据同步(sync.)。Duplicated Observed Data(189)告诉你该怎么做。这种情况下,特别是如果你使用旧式Abstract Windows Toolkit(AWT)组件,你可以采用这种方式去掉GUI class并代以Swing组件。
posted on 2005-08-18 14:41 ivaneeo 阅读(139) 评论(0)  编辑  收藏 所属分类: refactoring-从地狱中重生

只有注册用户登录后才能发表评论。


网站导航: