首页 > 学院 > 开发设计 > 正文

【重构学习】06类的重构

2019-11-14 13:37:22
字体:
来源:转载
供稿:网友

好吧,这一章要不要自己写一段示例代码考虑了很久,貌似还是不写的好,因为感觉这一章异常的简单

这一章就是关于类的方法和字段并不合理,所以在搬移方法和字段
1、搬移函数

修改点:一个函数与其所在类外的另一个类进行了过多的交流,调用后者或被后者调用

动机:因为出现上述情况,就会出现高度耦合,   

做法:在该函数最常引用的类中建立一个有着类似行为的新函数,将旧函数变成一个委托函数,或是移除

2、搬移字段

好吧,跟上面那个差不多,实际上也确实差不多

3、提炼类

修改点:某个类做了两个类的事(就是要单一职责咯)

做法:建立一个新类,将相关的字段和函数从旧类搬到新类

很简单,但是提炼类是改善并发程序的一种常用技术,因为它使你可以为提炼后的两个类分别加锁。

4、去除类

修改点:就像上一章对函数的操作一样,某个类如果没有做太多的事情,就存在去除的可能性(通常是之前的重构移走了这个类的责任)

做法:将这个类的所有特性搬移到另一个类中,然后移除原类。

有趣的做法是,将这个类里的函数都声明为PRivate,这样就可以斩断所有的引用,不过貌似现在的IDE都已经很厉害了,可以很方便找到引用。

5、隐藏委托关系

修改点:客户通过一个委托类来调用另一个对象

做法:在服务类上建立客户所需要的所有函数,用以隐藏委托关系

好吧,举个简单的例子,周伯通要参加华山论剑,首先他要找到华山这个对象,然后通过这个对象再去论剑,

然后Martin的意思是周伯通现在直接调用华山论剑这个函数,这个函数里面自己回去调用华山,然后再论剑

你可能会觉得多此一举,但是这样就避免了华山这个类的暴露出来,客户端要知道的是最简单的东西,而不是暴露一大堆东西出来,他可能就会要理解更多的东西

不利于后来的人的调用这个函数。

6、暴露委托关系(之所以我这么写,是为了表示这个东西和隐藏委托关系做法刚好相反,可能更好理解一点)

修改点:某个类做了过多的简单委托(意思就是说,周伯通这次在华山论剑,下次又在华山喝茶,在下次突然想在华山烤鸡,那么完了,周伯通这个类就要增加三个委托函数,但是

实际上,直接用华山,然后在华山再去论剑,喝茶,烤鸡,不必要在华山多了一个爬山之后,又在周伯通类里面加个华山爬山的函数)

做法:让客户直接调用受托类(5和6两个玩法就是对暴露程度的一种把控,随着不断的需求变更或者其它什么鬼来不断地去运用5和6以达到适当的暴露成都,为何我写到这里总有一种教唆大家去当暴露狂的感觉)

7、引入外加函数和引入本地扩展

所谓引入外加函数就是为你无法修改的类加一个函数时,去建一个函数,把这个无法修改的类的实例作为这个函数的参数

所谓引入本地扩展就是为你无法修改的类加一个函数时,去建立一个新类去继承这个类,使新类包含这些函数

好吧,这个就不讲了,

因为在第二章的时候  第19个重构点不完美的库类 这个里面我已经讲的很详细了。

实际上你看到这里已经可以发现了,基本上我在后来写的这些东西,在第二章里面都已经涉及到了,只不过在第二章里面有的我一笔带过有的比较详细而已。

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表