`
luowei31
  • 浏览: 79920 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

读书笔记之何时重构(下)

阅读更多

因为中间看了一本其他的书,差不多一个月未跟新读书笔记了,这段时间要补补课,接着上一章继续说说何时重构,文章中很多重构的方法这里还没有说明,后续章节会详细的介绍这些经常使用到的重构方法,尽请期待:


11、平行继承体系(Parallel):每当你为某个类增加一个子类的时候也必须为另一个类增加一个子类。如果你发现某个继承体系的名称前缀和另一个继承体系的名称前缀完全相同的时候就是需要重构的地方了。


12、冗赘类(Lazy Class):你创建的没一个类都得有人去理解它、维护它,这些工作都是要花钱的。如果一个类的所得不值其自身价值那么它就应该消失。


13、夸夸其他未来性(Speculative Generality):如果所有装置都会被用到,那就值得做;如果用不到,就不值得。它们只会挡你的路,所以,把它搬开吧。


14、令人迷惑的暂时值域(Temporary Field):有时你会看到这样的对象:其内某个instance变量仅为某种特定情势而设。这样的代码让人不易理解,因为你通常认为对象在所有时候都需要它的所有变量。你应该提炼类,然后把所有和这个变量相关的代码都放进这个新家。


15、过度耦合的消息链(Message Chains):用户向一个对象索求(request)另一个对象,然后再向后者索求另一个对象,然后再索求另一个对象……这就是消息链(Message Chains)。实际代码中你看到的可能是一长串getThis()或一长串临时变量。采取这种方式,将会导致紧密的耦合性,一旦对象间的关系发生任何变化,客户端就不得不作出相应修改。可以使用Hide Delegate方法进行重构,后续会讲解如何使用。


16、中间转手人(Middle Man):如果一个类接口有一半的函数都委托给其他的类,这样就是过度运用委托,这个时候你应该直接移除中间类,直接和实责对象打交道。



17、狎昵关系(Inappropriate Intimacy):有时你会看到两个类过于亲密,花费太多时间去探究彼此的私有成分。你可以采用 Move Method Move Field 帮它们划清界线,从而减少狎昵行径。你也可以看看是否运用 Change Bidirectional Association to Unidirectional 让其中一个class对另一个斩断情丝。如果两个实在是情投意合,可以运用Extract Class 把两者共同点提炼到一个安全地点,让它们坦荡地使用这个新class。或者也可以尝试运用 Hide Delegate 让另一个class来为它们传递相思情。


18、异曲同工的类(Alternative Classes with Different Interfaces):两个函数做同一件事,确有着不同的签名式,请运用重命名的方式,按照它们的用途重新命名,并反复运用移动函数的方法将某些行为移入类中,直到其协议一致。

19、不完美的程序类库(Incomplete Library Class):许多程序都建立在封装好的类库上,有些类库并不是那么完美,如果你想要修改它们可以运用Introduce Foreign MethodIntroduce Local Extension


20、数据类(Data Class):数据类中不应有Public值域,如果含有容器类值域(Collection Fields),你应该检查它们是否得到了恰当的封装,对于不该被其他类修改的值域,请取消Setting方法。


21、被拒绝的遗赠(Refused Bequest):有时候继承一个类的子类并不需要使用全部父类的方法,大部分方法甚至与子类并无任何关系这时候你需要用委托的方式来代替继承(Replace Inheritance with Delegation)。


22、过多的注释(Comments:有时候因为代码很糟糕才写了长长的注释,这个时候尝试重构代码消除长长的注释。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics