一个项目工程的重构小结

概述

首次看到移交到我手上的C++工程那个7千多行代码的文件时,既佩服又担心,前辈的构架能力让我甘拜下风,同时担心能不能胜任。
在研究源码的时候,也解决几个线上遗留的问题。愈发觉得有重构的必要——因为这将是我负责的代码。

重构

重构原则

不完全重构——那叫重写,一是否定了前辈的功劳,二是接触不久业务不熟,风险大。
因此总体原则是逐步重构,部分重构块——比如核心模式,一些算法优化。对于整体流程和部分魔幻式代码,不敢动。
在重构过程中,顺便编写测试用例,以保证重构前后结果一致。

重构方法

参数检查及出错处理,统一提前到初始化接口,即新建Init函数。原始系统在代码深处的不同地方做判断。出错尽早返回,不使用深嵌套。
参数统一化。如时间,传入为“yyy-MM-ddThh:mm:ss”形式,在代码中需要时间差的地方,转换为time_t格式,再计算。现统一在初始化接口中先转换。在最终转出时间,再转换为字符串。
去掉冗余不必要的多余算法步骤。
最短路径,在找到终点节点时,即返回,不用再遍历,节省时间。
深入研究最短路径的业务使用,调整计算步骤,减少遍历时次数。
将部分 C 风格的代码必为 C++ 风格(非全部)。
在部分结构体中添加构造函数,去掉 malloc 方式申请内存以及用 memset 初始化,设置好字段默认值,避免多处单独字段的赋值。

添加 yaml 配置文件,将编译依赖改为运行时依赖。

添加结构体比较函数,输出不同字段,方便新旧接口的对比。

其它

不拘泥于语言本身,如 C++ 代码也可以用 printf 输出,一是笔者习惯,二是格式化比 cout 容易写。
添加额外的测试用例,方便实验测试人员参考。

效果

耗时和内存占用均有所减少。新旧接口的运行,原接口平均为25ms,新接口为3ms。

未解决问题

同一个接口,根据时间的不同,使用两套不同命名空间的参数,未找到好的解决办法。

  • 本文作者:李迟
  • 版权声明:原创文章,版权归署名作者,转载建议注明出处(当然不注明亦可)。
  • 本文链接:/code-life/refactor-a-project.html