Fork me on GitHub

重构手法之简化函数调用【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……

posted @ 2017-11-30 09:12  NaYoung  阅读(681)  评论(0编辑  收藏  举报