我的重构(翻译)经历

前言

  1. 这里的重构基本指的是:把用A语言写的服务,使用B语言重写
  2. 工作的大部分内容其实就是人肉代码翻译
  3. 当然,重构通常也伴随的架构的优化和调整
  4. 最后,为了保证工作的顺利进行和服务的稳定切换,也总结了一些经验
  5. 下面将简要讲述作者的三段重构经历,分别是将三种不同的语言重构成Java(本人公司的所在的业务的主要语言就是Java,个人没特殊语言癖好),作者其实对这三种语言都不熟悉,是怎么完成重构任务的呢?

一、PHP重构成Java(“一比一”迁移)

  • 负责该业务的模块
  • 启动环境太复杂,较复杂的逻辑通过在线工具运行验证
  • 和熟悉该业务的PHP同事合作
  • 切换服务接口使用灰度策略和配置开关
  • 覆盖好测试用例
  • 没本地环境,必要时在线运行验证

二、C++重构成Java(站在“巨人的肩膀”上重新出发)

  • 其他公司业务调整,业务并入,需复制一套业务功能基本相同的服务
  • 通过参考原业务的代码,发现其中架构存在的问题,进行优化;参考其中的实现,避免在新实现中出现考虑不周(站在“巨人的肩膀”上)
  • 和第一段重构经历不同的是,原服务只是作为参考,在业务功能上一摸一样,并不需要在内部实现上保持和原来完全一致,但是新服务需要融入现有的服务基础体系
  • 有意思的优化,原来因为业务逻辑的需要使用单体服务,新服务使用新的巧妙设计,是服务可以有多实例运行
  • 不需要本地环境,阅读参考即可

三、Lua重构成Java(对当前“一无所知”也没关系)

  • 本地把环境跑起来,通过调试验证逻辑
  • 新业务需要,需要参考部分逻辑,同时进行重构,反哺原业务团队
  • 需要本地环境,验证原本一无所知的逻辑

总结

  1. 编程语言的语言其实大同小异,花半天左右基本可以快速熟悉语法,在阅读代码的时候遇到不懂的地方,即时查阅即可;
  2. 对于一些复杂的逻辑,可以通过编写代码块,执行验证输出;可以在本地环境运行,也可以利用在线工具运行;
  3. 对于历史包袱较重的,要善于利用灰度策略;
  4. 阅读代码后,跟熟悉业务的同学请教确认,和同事们讨论有时也是很有必要的。