将查询函数和修改函数分离:任何有返回值的函数,都不应该有看得到的副作用。命令与查询分离可以将查询所得结果缓存于某个字段中,这样的话后续的重复查询就可以大大加快速度。
函数参数化:如果两个函数逻辑非常相似,只有一些字面量值不同,可以将其合并成一个函数,以参数的形式传入不同的值,从而消除重复。这个重构后的函数还可以用于处理其他的值。如果第一个函数经过参数化以后不能直接替代另一个与之相似的函数,就先对参数化之后的函数做必要的调整,再做替换。
移除标记参数:不仅使代码更整洁,并且能帮助开发工具更好地发挥作用,代码分析工具也能更容易地体现出“高级”和“普通”两种预订逻辑在使用时的区别。
保持对象完整:如果一个函数需要多个值,而这些值其实可以用一个对象来表示,那就直接传这个对象,而不是一个个地传值。这样代码会更简洁,也更具可读性。
以查询取代参数:如果函数能自己获取需要的信息,就不要通过参数传递
以参数取代查询:如果获取信息的代价太高,不如通过参数传递。
移除设值函数:如果某个字段在对象创建后不应被修改,那么就不要为该字段提供设值函数。这样的话该字段就只能在构造函数中赋值。
以工厂函数取代构造函数 :构造函数常有一些丑陋的局限性(无法根据环境或参数信息返回子类实例或代理对象;构造函数的名字是固定的,无法使用比默认名字更清晰的函数名;构造函数需要通过特殊的操作符来调用),工厂函数就不受上面的那些限制,它的实现内部可以调用构造函数,但也可以换成别的方式实现。
以命令取代函数和以函数取代命令:命令对象(命令)大多只服务于单一函数,获得对该函数的请求,执行该函数,就是这种对象存在 的意义。命令对象为处理复杂计算提供了强大的机制。借助命令对象,可以轻松地将原本复杂的函数拆解为多个方法,彼此之间通过字段共享状态;拆解后的方法可以分别调用;开始调用之前的数据状态也可以逐步构建。但这种强大是以复杂性作为代价的。大多数时候,只是想调用一个函数让它完成自己的 工作就好。如果这个函数不是太复杂,那么命令对象可能显得费而不惠,就应该考虑将其变回普通的函数。但是如果特别需要命令对象提供的某种能力而普通的函数无法提供这种能力时,可以考虑使用命令对象。
函数参数化:如果两个函数逻辑非常相似,只有一些字面量值不同,可以将其合并成一个函数,以参数的形式传入不同的值,从而消除重复。这个重构后的函数还可以用于处理其他的值。如果第一个函数经过参数化以后不能直接替代另一个与之相似的函数,就先对参数化之后的函数做必要的调整,再做替换。
移除标记参数:不仅使代码更整洁,并且能帮助开发工具更好地发挥作用,代码分析工具也能更容易地体现出“高级”和“普通”两种预订逻辑在使用时的区别。
保持对象完整:如果一个函数需要多个值,而这些值其实可以用一个对象来表示,那就直接传这个对象,而不是一个个地传值。这样代码会更简洁,也更具可读性。
以查询取代参数:如果函数能自己获取需要的信息,就不要通过参数传递
以参数取代查询:如果获取信息的代价太高,不如通过参数传递。
移除设值函数:如果某个字段在对象创建后不应被修改,那么就不要为该字段提供设值函数。这样的话该字段就只能在构造函数中赋值。
以工厂函数取代构造函数 :构造函数常有一些丑陋的局限性(无法根据环境或参数信息返回子类实例或代理对象;构造函数的名字是固定的,无法使用比默认名字更清晰的函数名;构造函数需要通过特殊的操作符来调用),工厂函数就不受上面的那些限制,它的实现内部可以调用构造函数,但也可以换成别的方式实现。
以命令取代函数和以函数取代命令:命令对象(命令)大多只服务于单一函数,获得对该函数的请求,执行该函数,就是这种对象存在 的意义。命令对象为处理复杂计算提供了强大的机制。借助命令对象,可以轻松地将原本复杂的函数拆解为多个方法,彼此之间通过字段共享状态;拆解后的方法可以分别调用;开始调用之前的数据状态也可以逐步构建。但这种强大是以复杂性作为代价的。大多数时候,只是想调用一个函数让它完成自己的 工作就好。如果这个函数不是太复杂,那么命令对象可能显得费而不惠,就应该考虑将其变回普通的函数。但是如果特别需要命令对象提供的某种能力而普通的函数无法提供这种能力时,可以考虑使用命令对象。