美文网首页
第10章 简化函数调用

第10章 简化函数调用

作者: 后来丶_a24d | 来源:发表于2020-03-16 16:53 被阅读0次

    目录

    • RenameMethod(函数改名)
    • AddParameter(添加参数)
    • RemoveParameter(移除参数)
    • SeparateQueryfromModifier(将查询函数和修改函数分离)
    • ParameterizeMethod(令函数携带参数)
    • ReplaceParameterwithExplicitMethods(以明确函数取代参数)
    • PreserveWholeObject(保持对象完整)
    • IntroduceParameterObject(引入参数对象)
    • RemoveSettingMethod(移除设值函数)
    • HideMethod(隐藏函数)
    • ReplaceConstructorwithFactoryMethod(以工厂函数取代构造函数)
    • EncapsulateDowncast(封装向下转型)
    • ReplaceErrorCodewithException(以异常取代错误码)
    • ReplaceExceptionwithTest(以测试取代异常)

    简化函数调用

    函数改名

    • 函数的名称未能揭示函数的用途,修改函数的名称.
    • 函数的名称应该准确表达它的用途。给函数命名有一个好办法,首先考虑应该给这个函数写上一句怎样的注释,然后再想办法将注释变成函数名称。

    添加参数

    • 某个函数需要从调用端得到更多信息,为此函数添加一个对象参数,让该对象带进函数所需信息
    • 只要可能,其他选择都比添加参数要好,因为他们不会增加参数列的长度。过长的参数列是不好的味道,因为程序员很难记住那么多参数,而且长参数列往往伴随着坏味道数据泥团

    移除参数

    • 程序员可能经常添加参数,却往往不愿意去掉它们。他们打的如意算盘是:无论如何,多余的参数不会引起任何问题,而且以后还可能用上它。
    • 如果你不去掉多余参数,就是让你的每一位用户多费一份心。是很不划算的,更何况去掉参数是非常简单的一项重构

    将查询函数和修改函数分离

    • 某个函数既返回对象状态值,又修改对象状态。建立两个不同的函数,其中一个负责查询,另一个负责修改。

    令函数携带参数(类似命令模式)

    • 你可能会发现这样的2个函数:它们做着类似的工作,但因少数几个值致使行为略为不同。这种情况下,你可以将这些各自分离的函数统一起来,并通过参数来处理那些变化,用以简化问题。这样的修改可以去除重复代码,并提高灵活性,因为你可以用这个参数处理更多的变化情况。

    以明确函数取代参数

    • 对象调用某个参数,并将结果作为参数,传递给另一个函数,而接受该参数的函数本身也能够调用前一个函数;让参数接受者去除该项参数,并直接调用前一个参数
    • 如果函数可以通过其他途径获得参数值,那么它就不应该通过参数取得该值

    保持对象完整

    • 你从某个对象中取出若干值,将它们作为某一次函数调用时的参数;改为传递整个对象
    • 减小参数列表,提高代码可读性。
    • 过度会使依赖结构恶化

    引入参数对象

    • 你常会看到特定的一组参数总是一起被传递。可能有好几个函数都使用这一组参数,这些参数可能隶属同一个类,也可能隶属不同的类。这样一组参数就是所谓的数据泥团,我们可以运用一个对象包装所有这些数据。

    移除设值函数

    • 如果你为某个字段提供了设值函数,这就暗示这个字段值可以被改变。如果你不希望在对象创建之后此字段还有机会被改变,那就不要为它提供设值函数。

    隐藏函数

    • 有一个函数,从来没有被其他任何类用到,将这个函数修改为private。

    以工厂函数取代构造函数

    • 设计模式中工厂模式
    • 你希望在创建对象时不仅仅是做简单的建构工作。将构造函数替换为工厂函数

    封装向下转型

    • 向下转型也许是一种无法避免的罪恶,但你仍然应该尽可能少做。如果你的某个函数返回一个值,并且你知道所返回的对象类型比函数签名所昭告的更特化,你便是在函数用户身上强加了非必要的工作。这种情况下你不应该要求用户承担向下转型的责任,应该尽量为他们提供准确的类型

    以异常取代错误码

    • 某个函数返回一个特定的错误码(比如3),用以表示某种错误情况;改用异常
    • 代码的可理解性使我们虔诚追求的目标

    以测试取代异常

    • 面对一个调用者可以预先检查的条件,你抛出了一个异常;修改调用者,使它在调用函数之前先做检查

    参考文章

    相关文章

      网友评论

          本文标题:第10章 简化函数调用

          本文链接:https://www.haomeiwen.com/subject/ktdnehtx.html