【重构学习】06 类的重构
好吧,这一章要不要自己写一段示例代码考虑了很久,貌似还是不写的好,因为感觉这一章异常的简单
这一章就是关于类的方法和字段并不合理,所以在搬移方法和字段
1、搬移函数
修改点:一个函数与其所在类外的另一个类进行了过多的交流,调用后者或被后者调用
动机:因为出现上述情况,就会出现高度耦合,
做法:在该函数最常引用的类中建立一个有着类似行为的新函数,将旧函数变成一个委托函数,或是移除
2、搬移字段
好吧,跟上面那个差不多,实际上也确实差不多
3、提炼类
修改点:某个类做了两个类的事(就是要单一职责咯)
做法:建立一个新类,将相关的字段和函数从旧类搬到新类
很简单,但是提炼类是改善并发程序的一种常用技术,因为它使你可以为提炼后的两个类分别加锁。
4、去除类
修改点:就像上一章对函数的操作一样,某个类如果没有做太多的事情,就存在去除的可能性(通常是之前的重构移走了这个类的责任)
做法:将这个类的所有特性搬移到另一个类中,然后移除原类。
有趣的做法是,将这个类里的函数都声明为private,这样就可以斩断所有的引用,不过貌似现在的IDE都已经很厉害了,可以很方便找到引用。
5、隐藏委托关系
修改点:客户通过一个委托类来调用另一个对象
做法:在服务类上建立客户所需要的所有函数,用以隐藏委托关系
好吧,举个简单的例子,周伯通要参加华山论剑,首先他要找到华山这个对象,然后通过这个对象再去论剑,
然后Martin的意思是周伯通现在直接调用华山论剑这个函数,这个函数里面自己回去调用华山,然后再论剑
你可能会觉得多此一举,但是这样就避免了华山这个类的暴露出来,客户端要知道的是最简单的东西,而不是暴露一大堆东西出来,他可能就会要理解更多的东西
不利于后来的人的调用这个函数。
6、暴露委托关系(之所以我这么写,是为了表示这个东西和隐藏委托关系做法刚好相反,可能更好理解一点)
修改点:某个类做了过多的简单委托(意思就是说,周伯通这次在华山论剑,下次又在华山喝茶,在下次突然想在华山烤鸡,那么完了,周伯通这个类就要增加三个委托函数,但是
实际上,直接用华山,然后在华山再去论剑,喝茶,烤鸡,不必要在华山多了一个爬山之后,又在周伯通类里面加个华山爬山的函数)
做法:让客户直接调用受托类(5和6两个玩法就是对暴露程度的一种把控,随着不断的需求变更或者其它什么鬼来不断地去运用5和6以达到适当的暴露成都,为何我写到这里总有一种教唆大家去当暴露狂的感觉)
7、引入外加函数和引入本地扩展
所谓引入外加函数就是为你无法修改的类加一个函数时,去建一个函数,把这个无法修改的类的实例作为这个函数的参数
所谓引入本地扩展就是为你无法修改的类加一个函数时,去建立一个新类去继承这个类,使新类包含这些函数
好吧,这个就不讲了,
因为在第二章的时候 第19个重构点不完美的库类 这个里面我已经讲的很详细了。
实际上你看到这里已经可以发现了,基本上我在后来写的这些东西,在第二章里面都已经涉及到了,只不过在第二章里面有的我一笔带过有的比较详细而已。