改善既有代码的设计》之五 简化函数调用(2)

改善既有代码的设计》之五 简化函数调用

Remove Parameter

状况:函数本体不再需要某个参数,那么将该参数去除。
动机:
  1、参数指出函数信息,不同参数代表不同意义。函数调用这必须为每一个参数操心该传什么东西进去。——如果不去掉参数,那就为每一次调用多费一份心。
  2、如果你发现有很多调用者,那么为了不让调用者操心,你可以这样做,把要移除的参数设置为某个默认值(如null),这样调用者只传那些没有默认值的参数。

改善既有代码的设计》之五 简化函数调用

Separate Query from Modifier

 

状况:如果某个函数既返回对象的状态值,又修改(副作用)对象状态(state),那么建立两个不同的函数,其中一个负责查询,另一个负责修改

改善既有代码的设计》之五 简化函数调用

 Example:

改善既有代码的设计》之五 简化函数调用

改善既有代码的设计》之五 简化函数调用

 

 Parameterize Method

 

状况:如果若干函数做了类似的工作,但在函数本体中包含了不同的值,那么建立单一函数,以参数表达那些不同的值

动机:

  1、一般是因为有少数几个值不同,所以建立了几个相似的函数。

  2、分离的函数替换为一个统一的函数,通过参数来处理那些变化情况,以简化问题。

  3、去除重复的代码,提高灵活性。——可以使用这个参数处理其他变化情况。

改善既有代码的设计》之五 简化函数调用

 

Example:

改善既有代码的设计》之五 简化函数调用

改善既有代码的设计》之五 简化函数调用

 

 Replace Parameter with Explicit Methods

 

状况:你有一个函数,其内完全取决于参数值而采取不同的反应,那么针对该参数的每个值,建立一个独立的函数

动机:

  1、如果某个参数有离散值,而函数内又以条件式检查这些参数值,并根据不同的参数值做出不同的反应,那么就应该使用本次重构。

  2、可以获得好处:“编译期代码检查”,“接口更清楚”(如果用参数值决定函数行为,那么函数用户不但需要观察该函数,而且还要判断参数是否“合法化”。——而合法的参数,很少在文档中提到,必须通过上下文,才能判断)

  3、不考虑“编译期检验”的好处,为了获取一个清晰的接口,我们也值得这么做。

改善既有代码的设计》之五 简化函数调用

Example:

改善既有代码的设计》之五 简化函数调用

改善既有代码的设计》之五 简化函数调用

改善既有代码的设计》之五 简化函数调用

 

 Preserve Whole Object

 

状况:如果你从某个对象中取出若干值,将它们作为某一次函数调用中的参数,那么改使用(传递)整个对象

 动机:

  1、参数列更稳固;

  2、提高代码的可读性;——过长的参数列很难使用,因为调用者和被调用者都必须记住这些参数的用途。

改善既有代码的设计》之五 简化函数调用

Example:

改善既有代码的设计》之五 简化函数调用

改善既有代码的设计》之五 简化函数调用

 

 Replace Parameter with Methods

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6f9b0f93d147e4e410b5f12a09e299f8.html