zoukankan      html  css  js  c++  java
  • 代码的坏味道【2】


    返回总目录


    四、Long Parameter List(过长参数列)

    太长的参数列难以理解,太多参数会造成前后不一致、不易使用。

    1、一般情况来说,如果参数多于3个,就可以考虑使用对象了。将函数所需要的参数封装在一个新类中,将这个类当做参数。

    2、如果方法的参数数目不定,且参数类型一致,也可以使用params关键字,减少重复参数。

    只需要传给函数足够的、让其可以从中获取自己需要的东西就行了

    五、Divergent Change(发散式变化)

    通俗地说,就是某个类经常因为不同的原因在不同的方向上发生变化(一个类受多种变化的影响)。

    此时我们要做的就是找出某特定原因而造成的所有变化,然后将他们提炼到另一个类中。

    针对某一外界变化的所有修改,只应发生在单一类中,而这个类中所有的内容都应反映此变化

    六、Shotgun Surgery(霰弹式变化)

    这种情况与Divergent Change恰恰相反。遇到某种变化,都必须在许多不同的类内做出许多小修改(一种变化引发多个类相应修改)。

    把所有需要修改的代码放进同一个类中。如果暂时没有合适的类可以安置这些代码,就创造一个。

    Shotgun Surgery和Divergent Change你都需要适时整理重构代码,让“外界变化”和“需要修改的类”趋于一一对应。

    七、Feature Envy(依恋情结)

     这种坏味道主要在于:一个函数使用其他类属性比使用自身类属性还要多。换句话说,就是某个函数为了计算某个值,从另一个对象那儿调用几乎半打的取值函数。

     疗法也显而易见,就是把这部分代码提炼到单独的函数中,然后将函数再移到它该在的地方。

     当然了,并非所有情况都这么简单。一个函数往往会用到几个类的功能,那么它究竟魂归何处?原则就是:判断哪个类拥有最多被此函数使用的数据,然后就把这个函数和那些数据摆在一起。

    将数据和对数据的操作行为包装在一起

    八、Data Clumps(数据泥团)

    两个类中有相同的字段、许多函数签名中有相同的参数。

    找出这些数据以字段形式出现的地方,将它们提炼到一个独立的对象中。要是想缩减参数可以考虑以一个对象取代这些参数。

    总是绑在一起的数据应该拥有属于它们自己的对象

    To Be Continued...

  • 相关阅读:
    meta 标签禁止缩放失效
    [UE4]打包EXE
    [UE4]Set Array Elem
    [UML]用例图
    [UE4]函数参数引用
    阻止移动鼠标双击页面放大, no double tap
    spring boot入门 -- 介绍和第一个例子
    SpringBoot 启动错误搜集
    spring boot 启动找不到或无法加载主类
    Spring Boot中Starter是什么
  • 原文地址:https://www.cnblogs.com/liuyoung/p/7821359.html
Copyright © 2011-2022 走看看