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

状况:如果对象调用某个函数,并将所得结果做为参数,传递给另一个函数(接受参数的函数也有调用前一个函数的能力),那么让参数接受者去除该项参数,并直接调用前一个函数

 

动机:

  1、如果函数通过其他途径获得参数值,那么它就不应该通过参数取得该值。

  2、过长的参数列会增加程序阅读者的理解难度,因此我们应该尽可能的缩短参数列的长度。

  3、方法:看看“参数接受端”是否可以通过“与调用端相同的计算”来取得参数携带值。

  4、如果函数调用端通过对象内部的另一个函数来计算参数,并在计算过程中“未曾引用调用端的其他参数”,那么就可以将这个计算过程转移到被调用端内,从而去除该项参数。

 

Example:

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

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

 

 Introduce Parameter Object

 

状况:某些参数总是很自然地同时出现,那么以一个对象取代这些参数

 

动机:

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


  1、一组参数可能有几个函数同时使用,这些函数可能隶属于同一个class,也可能隶属于不同的classes。——这样的一组参数就是所谓的Data Clump(数据泥团)。

  2、我们可以运用一个对象包装所有这些数据,再以对象取代Data Clump。——目地:哪怕只是为了把这些数据组织在一起,这样做也是值得的。

  3、本项重构的价值在于“缩短了参数列的长度”。此外,新对象所定义的访问函数(accessors)还可以使代码更具一致性。——这又进一步降低了代码的理解难度和修改难度。

  4、本项重构还可以带给你更多好处。——当你把这些参数组织到一起之后,往往很快可以发现“可被移植新建class“的行为。——减少重复代码。

 

Example:

 

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

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

 

 Remove Setting Method

 

状况:你的class中的某个值域,应该在对象初创时被设置,然后就不再改变,那么去掉该值域的所有设置函数(setter)。

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

动机:

  1、如果你为某个值域提供了设置函数(setter),这就暗示了这个值域可以被改变。

  2、如果你不希望在对象初创之后,此值域还有机会改变,那就不要为它提供设置函数。——这样你的意图会更加清晰,并且可以排除其值被修改的可能性。

Example:

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

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

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

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

 

 Hide Method

 

状况:如有有一个函数,从来没有被其他class用到,那么将这个函数设置为private

 

动机:

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


  1、重构往往促使你修改“函数的可见度“。——时刻检查可被隐藏的函数。

    2、经常检查有没有可能降低某个函数的可见度(使它私有化)。

    ——>当你在另一个class中移除对某个函数的调用时,就应该检查。

    ——>特别对setter函数进行上述的检查。

 

  

 Replace Constructor with Factory Method

 

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

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