美文网首页程序员
重构:改善既有代码的设计

重构:改善既有代码的设计

作者: 笔寂晓才 | 来源:发表于2016-03-24 17:53 被阅读165次

    函数的参数尽量以对象为准,几个隶属于同一个对象的参数可以用一个对象替代。这样可以防止过长的参数列表,而且后期的增加参数,只需要修改很少的几处就可以了。

    发散式变化:(一个类受多种变化的影响)
    针对某一外面变化的所有相应修改,都应该只发生在单一类中,而这个新类中的所以内容都应该反应此变化。
    找出某种特定原因而造成的所有变化,然后提炼到新的一个类中

    散弹式变化:(一个变化引起多个类的修改)
    如果要在很多地方添加很少的代码,可以把这些代码统一封装到一个类来提供,可能会造成少量的发散式问题,但是你可以很轻易的解决。(搬移函数、搬移字段、将类内联化)

    多状态的选择执行:
    把选择的部分提炼到一个独立的函数中,再用搬移函数将它搬移到需要多态性的那个类里。

    提炼函数:提炼函数出来,很多局部变量的话可以根据参数给传进去,如果需要把结果给出来的话可以让函数有返回值。如果返回值需要多个,那传进去的参数就可以传地址,这样可以修改里面的值。不支持出值的话,那就通过多个函数来返回(110)。如果函数特别复杂,光是通过提炼函数做不到的话,可以提炼类,在一个类里面把它分解成很多个函数,用类里面的变量来实现。(135)

    以查询取代临时变量:用一个临时变量保存一个表达式的运算结果,但是很多地方会用到,为了这个临时变量我们可能让这个函数做很多事情,这样可能会让函数很长。将这个表达式提炼到一个函数中。其他使用的地方都用这个函数。此后,新函数就可以被其他函数使用。(120)

    引入解释性变量:if的括号里面很多个并列条件的时候,我们可以把每个并列条件都拿出来用一个临时变量存放结果,这个临时变量就可以看得出来这个条件是在做什么。拆出来的单独表达式可以再提炼函数的。(124)

    搬移函数:如果这个函数的使用主要是跟另外一个类进行沟通,那么我们可以考虑把它搬移到那个类里面去。我们可以通过代理模式来实现。如果这个函数有些操作必须在本类完成,那么我可以把这个函数再分解。(142)

    隐藏中间人:通过对委托对象的功能就行封装转发让外面不知道里面的实现。(157)
    移除中间人:由于需要对委托对象很多操作,需要大量的封装转发变得很臃肿且多余,那么我们应该移除封装转发。(160)
    这两者需要根据实际情况来区别对待,不同时期的选择会是不同的。

    以对象取代数据值:当最初只需要传入一个值的时候,我们可以提前考虑下这个值是否还含有其他属性。如果可能含有其他值的话,我们就以对象取代值,这样方便以后的扩展。

    简化条件表达式:当if嵌套的时候,我们可以把if分解成多个平级的if判断,并且用return来控制结束。如果上层的if里面有许多判断,那么我们可以反转判断条件,让不符合的直接return。总的思路就是先让if执行简单的逻辑,不断的分解,最后是把复杂的嵌套判断分解成为平级的。

    用委托取代继承:当我们只需要使用超类很少的一部分功能的时候,我们选择用委托,避免继承过来过多的函数。
    用继承取代委托:当我们需要写很多委托来使用超类的功能的时候,我们选择用继承,避免了过多无用的代码。

    相关文章

      网友评论

        本文标题:重构:改善既有代码的设计

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