重构手法之简化函数调用【1】
本小节目录
1Rename Method(函数改名)
概要
函数的名称未能揭示函数的用途。
修改函数的名称。
动机
将复杂的处理过程分解成小函数是良好的编程风格。但是,如果做的不好,会使你费尽周折却弄不清楚这些小函数各自的用途。要避免这些麻烦,关键在于给函数起一个好名称。函数的名称应该准确表达它的用途。给函数命名有一个好办法:首先考虑给这个函数写上一句怎样的注释,然后想办法将注释变成函数名称。
如果你看到一个函数名称不能很好的表达它的用途,应该马上加以修改。
范例
如下代码所示,假如一个公司建立一个员工的类,类中有一个员工名字的字段和一个按照小时计算员工收入的方法,那么下面代码的取名就显得很难理解了,所以我们会重构名称。
public class Person { public string FN { get; set; } public decimal ClcHrlyPR() { // code to calculate hourly payrate return 0m; } }
重构后代码如下所示,这样看起来就非常清晰,如果有新进项目组的成员,也会变得很乐意看这个代码。
public class Employee { public string FirstName { get; set; } public decimal CalculateHourlyPay() { // code to calculate hourly payrate return 0m; } }
小结
此重构经常被广大程序员所忽视,但是带来的隐患是不可估量的,也许老板要修改功能,那我们来看这段没有重构的代码(就算是自己写的,但由于时间和项目多等关系,我们也很难理解了),然后就会变得焦头烂额。相反重构后的代码就会觉得一目了然、赏心悦目。
当然了,本文中的改名不仅仅是函数,还包括类、方法参数、变量、委托、事件等等元素。
2Add Parameter(添加参数)
概要
动机
这个重构手法很常用,我相信你肯定用过它。
你必须修改一个函数,而修改后的函数需要一些过去没有的信息,因此需要给该函数添加一个参数。
那么,什么时候不使用本项重构?
除了Add Parameter外,只要有可能,其他选择都比“Add Parameter”要好,因为有可能其他选择不会增加参数列的长度。过长的参数列是不好的味道,因为程序员很难记住那么多参数,而且往往伴随着坏味道Data Clumps。
3Remove Parameter(移除参数)
概要
函数本体不再需要某个参数,将该参数去除。
动机
程序员可能经常添加参数,却往往不愿意去掉它们。他们想:无论如何,多余的参数不会引起任何问题,而且以后还可能用上它。
这种想法很糟糕!参数代表着函数所需的信息,不同参数代表不同意义。函数调用者必须为每一个参数操心该传什么东西进去。如果不去掉多余参数,就是让你的每一位用户多费一份心。
To Be Continued……