可以从以下几个方面分析
- 变量、数据:命名、全局数据、可变数据、数据泥团、临时字段、纯数据
- 函数:重复代码、过长函数、过长函数列表、多余函数
- 语句:重复switch、循环语句、
- 交互:依恋情结、过长的调用链、中间人、内幕交易
- 其他:发散变化、霰弹修改、注释、通用性
神秘的命名
不能很好表达语义的标识符;
重复代码
函数
- 过长的函数
在函数体中包含太多的逻辑、与变量;应该更积极的分解函数,并且遵循这样的原则:每当需要一注释来说明时,可以提炼成一个函数;
对数据的修改经常会导致出乎意料的结果和难以发现的bug。函数式编程 - 完全建立在“数据永不改变”的概念基础;所以修改数据,需要返回一份新的数据副本,旧的数据保持不变;
- 数据泥团
发散式变化
某个模块经常因为不同的原因在不同的方向上发生变化,发散式变化就出现了。
霰弹式修改
如果每遇到某种变化,都必须在多个不同的地方进行修改,这就是霰弹修改。
依恋情结
一个函数跟一个模块中的函数或者数据交流频繁,远胜于在自己所处模块内部的交流。
语句
- 重复switch
每当想增加一个选择分支时,需要找到所有的switch,并更新;