哪些代码我们需要去重构:
一:重复代码
情况一:同一个类的两个函数含有相同的表达式。这时候我们需要提炼重复代码,然后让两个地点调用被提炼出来的代码。
情况二:两个互为兄弟的子类内含相同的表达式。将相似的和差异部分割开。构成单独函数。
二:过长函数
拥有短函数的对象会活的比较好、比较长。“间接层”所能带来的全部利益----解释能力、共享能力、选择能力---都是由小型函数支持的。
我们需要积极地去分解函数。遵循一条原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途命名。哪怕替换之后的函数调用动作比函数自身还长,只要函数名称能够解释其用途,我们就该毫不犹豫地做。关键不在于函数地长度,而在于函数“做什么”和“如何做”之间地语义距离。
三:过长参数列
因为太长的参数列会导致难以理解,并会造成前后不一致,不易使用。而且一旦你需要更多的数据,就不得不去修改它。所以我们需要将其重构为对象。
四:发散式变化
针对某一外界变化的所有相应修改,都只应该发生在单一类中,而这个新类内的所有内容都应该反应此变化。为此,你应该找出某特定原因而造成的所有变化。然后将他们提炼到另一个类中。
五:依恋情结
对象技术的全部要点在于:这是一种“将数据和对数据的操作行为包装在一起”的技术,有一种经典问题是:函数对某个类的兴趣高过对自己所处类的兴趣。这种最通常的焦点是数据。无数次经验里,我们看到某个函数为了计算某个值,从另一个对象那儿调用几乎半打的取值函数。疗法显而易见:把这个函数移至另一个地点。
六:数据泥团
一个好的评判办法是:删掉众多的数据中的一项,这么做。其他数据有没有因而失去意义,如果他们不再有意义,那么我么那就应该为他们产生一个新的对象。