最常出现的坏味道
书中的内容感觉是按照问题出现的频率来来编排,前面一开始提到的就是重复代码、过长的函数,这两个都是我在实际项目中遇到的最常出现的问题。
重构原则
- 导出函数,将重复代码中的片段提取出来;过长的函数则在语义上将其拆分,判断的原则是如果觉得某段代码需要写注释,那往往就是兆头。
- 导出函数的过程可能会遇到临时变量的问题,这时可以使用函数代替参数,将一些含有固定表达式的临时变量抽出来形成函数,减少传递。当要传的参数过长时,如果参数之间可以组成一个合理的对象,就用该对象将这些数据收集起来,使代码更清晰,同时保留一定的可扩展性;如果参数间缺乏合理的联系,就搞出一个参数对象来,减少参数列个数。对象的依赖问题需要着重考虑。
重构原则
单一职责
单一职责这个概念深入到代码的各个层面。从一个变量,到一个函数,到一个类,再到一个模块。
在变量层面来看,一个变量只承担一个职责,只负责一件事,许多常见的陋习就是复用某一个变量,导致职责不清。其实,没必要省那么一点点空间牺牲到可读性和可维护性。除了那些收集结果的变量,如循环类累积的结果,其他变量应该都最好只赋一次值。
在函数角度来看,函数应该做到就是和函数名字显示功能一样。
类更是如此。对于类,常见的坏味道就是发散式变化和霰弹式修改。前者是一个类承载了过多职责,导致因为不同的原因在不同的方向上发生变化,后者是因为某个职责分散到了许多类中。前者的解决办法是拆分类,后者则是将职责集中在某一个类中。