1. 第一组重构

1. 提炼函数

当你想为接下来的一段代码写点注释时,那么这就暗示着,这段代码应该被提炼成一个函数,这个函数的名字应该是函数的功能,是做什么,而不是这么做,一般你想写什么注释,名字就重注释中抽取关键词。当遇到循环、条件等语句,可以将它们提炼成一个函数。

提炼函数的目的是将意图与实现相分离。所以一般有个主函数,里面调用其他的函数,这个主函数包含的就是意图,其他函数就是实现。

提炼函数时,如果要返回多个值,则考虑将这多个值组合成一个对象,不过一般都是一个函数最多返回一个值。

2. 内联函数(不是内部函数)

什么时候需要内联函数呢?

当函数内容与其名称一样清晰易于理解时;

当一群函数组织不太合理,则先合再分;

过多的委托层。

3. 将表达式提炼成变量

有时,将表达式提炼成变量,能更好地理解代码的含义。

而且也不需要重复地写表达式。

如果一个变量的作用域是一个对象,则将表达式提炼成一个方法。

4. 内联变量

如果表达式比变量更具表现力,则用表达式代替变量。

5. 改变函数声明

取一个准确的名字

参数的范围:是需要一个人,还是只需要一个人的年龄

改函数声明时,如果有其他人负责的模块会调用这个接口,则先写另一个声明,将原函数设为不推荐,在原函数中调用新函数。一段时间后,等客户端都使用了新函数,就将就函数删除。

6. 封装值

之前的重构只是控制数据结构的访问,封装值则限制外部修改值。当外部需要访问一个数据时,返回它的副本,这样即使修改了,也不会影响原来的数据。但有时外部就是需要更改原来的数据,要注意分辨。越是使用范围广的数据,越是需要一个封装函数。

7. 变量改名

给变量取一个准确的名字

8. 引入参数对象

当你发现一组数据总是在一起作为参数出现(数据泥团),这说明这一组有着某种关系,创建一个类,将它们移动到类中。

这么做往往会催生代码更深层次的改变,你可以把涉及这些数据而较少涉及其他数据的方法也移到该类中,这样软件的结构就更清晰。

9.函数组合成类

如果发现一组函数形影不离地操作同一数据块,就为它们及数据创建一个类。

10. 函数组合成变换

计算派生数据的逻辑收拢到一处,组合成变换。

这和9非常像,但是类中的方法会更新源数据,变换则不会,而是根据源数据计算新数据,保存新数据。

虽然在java、c#中只有类的概念。

11. 拆分阶段

当看见一段代码在做两件不同的事,就拆分成两个方法,每一个方法应该都有明确的边界。如果一块代码中出现的几段,它们分别使用不同的一组数据和方法,这就是需要拆分的明显线索。

如果第二个方法要用到第一个方法的结果数据(有多个),将这些数据作为一个结构体(如果类型相同,就返回数组),传递给方法二。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值