极客时间《10x程序员工作法》学习笔记 Day 12

129 阅读2分钟

面对遗留系统,应该怎样做

运用思考框架

  • 我现在是个什么水平?(现状)
  • 我想达到一个什么水平?(目标)
  • 我将怎样到达那个目标?(实现路径)

现状

对于第一个问题,面对遗留系统,我们的现状是什么呢?现状看似是遗留系统,烂代码,赶紧改吧。但请稍等!这只是现象,不是根因。 先分析一下,找到问题的根因。比如,实现一个直觉上需要两天的需求,要做两周或更长时间,根因是代码耦合太严重,改动影响的地方太多;再比如,性能优化遇到瓶颈,怎么改延迟都降不下来,根因是架构设计有问题,等等。

为什么一定要先做这个分析,直接重写不就好了?因为如果不进行根因分析,你很难确定问题到底出在哪,更关键的是,你无法判断重写是不是真的能解决问题。如果是架构问题,你只进行模型的调整是解决不了问题的。同样,如果是模型不清楚,你再优化架构也是浪费时间。所以,我们必须要找到问题的根源,防止自己重新走上老路。

目标

第二个问题,对于遗留系统而言,这个问题反而是最好回答的:重写某些代码。

先尝试重构你的代码,尽可能在已有代码上做小步调整,不要走到大规模改造的路上,因为重构的成本是最低的。

实现路径

将目标分解

要重写一个模块,这时你需要思考,怎么才能保证我们重写的代码和原来的代码功能上是一致的。对于这个问题,唯一靠谱的答案是测试。对两个系统运行同样的测试,如果返回的结果是一样的,我们就认为它们的功能是一样的。构建测试防护网,保证新老模块功能一致

怎么去替换遗留系统,答案是分成小块,逐步替换。这又是任务分解思想在发挥作用。

要想代码腐化的速度不那么快,一定要在软件设计上多下功夫。一方面,建立好领域模型,另一方面,寻找行业对于系统构建的最新理解。