在一个基础系统上进行增量开发是比较常见的。增量开发的过程中,一方面会因为系统的初始框架有部分不适应新需求而变更,另一方面是维护开发人员更换,编程习惯及能力的差异,对系统的框架理解不一致,在进度的压力下破坏了系统的框架。 无论是哪一种,都有必要阶段性的进行重构,以偿还技术债务。技术债务不断累加的后果,是修改越来越复杂,当适当的修改点越来越难找,犯错的机会越来越大。
读《大话设计模式》时,就一直有几个问题:
1. ”系统框架修改点在哪?“ ,一个好的框架,在修改点的扩散会做的比较好。
2. ”逻辑放在哪里?“,这是一个非常重要的问题,书上提到的”功能帽子“,是一个不错的说法。
3. ”系统的体积(代码量)一直在膨胀, 什么情况下,能将一些过时的功能去除?“。前段时间,看小米的一个介绍,说通过与客户的互动,对功能受欢迎度排序,可以达到去除不实用的功能。 只有对用户需求,深度分析,才能从源头上重构需求。
重构,必须要有一个对应的功能测试系统来保障,对于一个复杂的大系统而言,功能流程的覆盖面有点困难。
书中第一章展示了一个重构的例子。例子中,用到了如下几种重构方法
1. 拆解功能逻辑, 如将switch逻辑,拆成一个单独函数。
2. 对临时变量,根据只读与修改进行分类,决定拆分的函数是传参还是返回值。书中的观点认为临时变量会增大函数的规模。通过函数的封装可以减少临时变量的使用。
3. 由于函数中会对数据交叉使用, 这里提到一个很有用的方法:函数方法移动。 也就是说,将这些函数,移动到对应的数据类中,作为数据类的方法。这实际上是在修复被破坏的类。
4. 使用多态,继承,抽象接口
5. 使用设计模式--策略,重新优化结构。实现上这就是类的设计重构。