可以从以下几个方面分析

  1. 变量、数据:命名、全局数据、可变数据、数据泥团、临时字段、纯数据
  2. 函数:重复代码、过长函数、过长函数列表、多余函数
  3. 语句:重复switch、循环语句、
  4. 交互:依恋情结、过长的调用链、中间人、内幕交易
  5. 其他:发散变化、霰弹修改、注释、通用性

    神秘的命名

    不能很好表达语义的标识符;

重复代码

包含太多相同代码,应该抽象出来

函数

  1. 过长的函数

在函数体中包含太多的逻辑、与变量;应该更积极的分解函数,并且遵循这样的原则:每当需要一注释来说明时,可以提炼成一个函数;

  1. 过长函数参数

    数据

  2. 全局数据

  3. 可变数据

对数据的修改经常会导致出乎意料的结果和难以发现的bug。函数式编程 - 完全建立在“数据永不改变”的概念基础;所以修改数据,需要返回一份新的数据副本,旧的数据保持不变;

  1. 数据泥团

不同的函数,类中往往有相同的字段,参数。

发散式变化

某个模块经常因为不同的原因在不同的方向上发生变化,发散式变化就出现了。

霰弹式修改

如果每遇到某种变化,都必须在多个不同的地方进行修改,这就是霰弹修改。
依恋情结
一个函数跟一个模块中的函数或者数据交流频繁,远胜于在自己所处模块内部的交流。

语句

  1. 重复switch

每当想增加一个选择分支时,需要找到所有的switch,并更新;

  1. 循环语句

    使用管道取代它

  2. 多余的函数

    交互

  3. 依恋情结

  4. 临时字段
  5. 过长的调用链、
  6. 中间人:过度使用委托,可以直接与负责对象交互。
  7. 内幕交易

    其他

  8. 通用性:以各种名义的钩子和特殊情况处理一些非必要的事情,系统就会变的难以维护。如果有用到可以;但用不到可以搬移开来。

  9. 注释:优先考虑使用函数说明,再使用注释。