标签:
之前写了个函数的重构,这里写的是函数的调用的重构,不同哦,是为了写出让别人好调用的函数(或接口)。
1、函数改名
修改点:函数的名称未能提示函数的用途。
做法:修改函数的名称
如果你想给函数写上一句什么注释,那么你就把这个注释想办法作为名称写上好了。
Martin原话:
你可能无法第一次就取一个好名字,这个时候你就会想,就这么将就着吧,毕竟这只是一个名称。
当心,这是恶魔的召唤,是通向混乱之路,千万不要被它诱惑。
(我就无数次被诱惑,然后取了很多渣名,因为想一个好名字真是太难了,除非我把函数名写很长)
2、添加参数
修改点:某个函数需要从调用端得到更多信息
做法:为此函数添加一个对象参数,让该对象带进函数所有信息。
3、移除参数(好吧,相比第二点,很多人可能会嫌麻烦不去搞这个,恶魔的诱惑哦)
修改点:函数本体不再需要某个参数
做法:将该参数去除
4、将查询函数和修改函数分离(所以直接用属性就好了啊)
修改点:某个函数既返回对象状态值,又修改对象状态
做法:建立两个不同的函数,其中一个负责查询,又负责修改
存在例外哦,就是并发场景下同时查询与修改的操作,那么你仍应该分离,但是单独写一个函数去同时进行这两个事情。
5、令函数携带参数
修改点:若干函数做了类似工作,但在函数本体中却包含不同的值
做法:建立单一函数,以参数表达那些不同的值
简单来说,就是两个函数有很多相同部分,就几个值不同,你把这几个值作为函数参数,那么就可以把两个函数合二为一
6、以明确函数替代参数(与5相反哦)
修改点:你有一个函数,其中完全取决于参数值而采用不同行为(看好是完全)
做法:针对该参数的每一个可能值,建立一个独立函数
意思就是说你根据参数的判断而采取不同的行为,那么你完全可以分成几个函数来实现。
而如果影响并不是很大,用5就好了,如果确实需要条件判断,那么可以考虑使用多态来消除条件判断
7、保持对象完整
修改点:你从某个对象中去除若干值,将它们作为某一次函数调用时的参数
做法:改为传递整个对象
动机:万一将来函数需要新的数据项,你就必须查找并修改对此函数的所有调用。而且这样也能提高整个代码的可读性。
但是也有例外:如果你穿的是数值,那么函数就仅仅依赖于数值,但是如果是对象,那么依赖的就是整个对象,这有可能会造成你的结构恶化,所以你得具体情况具体分析。
不过如果一个函数使用了另外一个对象很多的值,那么你可能需要考虑是不是需要把这个函数放在那个对象所属的类里面了。
标签:
原文地址:http://www.cnblogs.com/vvjiang/p/5117677.html