• 什么样的系统是遗留系统:
    • 旧、过时、重要、仍在使用
  • 为什么需要现代化遗留系统:
    • 遗留系统往往是核心业务系统,不可能完全舍弃,但是维护成本又非常高
    • 遗留系统中携带大量数据资产导致难以和其他系统集成
    • 遗留系统中有丰富的业务知识待提取
  • 三大原则:
    • 以降低认知负载为前提:在内在认知负载一定的前提下,尽量减少外在认知负载,增加相关认知负载
  • 内在认知负载:从事一项工作必须付出的努力,比如前端必须要会 TS & 某一种框架,TDD 一类的开发技巧等。
  • 外在认知负载:代码越糟糕、越难读,外在认知负载越高
  • 无处可寻的业务知识:某一段代码做了什么,对应了什么业务功能
  • 毫无规律的架构知识:代码模块如何划分、架构因何设计
  • 如何降低认知负载:活文档:与代码共同演进
  • 基于实例化需求组织单元测试
  • 对遗留系统进行注释
  • 第三方工具梳理遗留系统内部的依赖关系
    • 以假设驱动为指引导:让大家都能看到现代化成果
    • 以增量演进为手段:避免竹篮打水一场空
  • 四化建设:
    • 代码现代化
  • 对代码做可测试化重构(如果代码不可测),并添加测试。
  • 提取接缝模式的核心思想和适用场景
  • 在测试的保护下,安全地重构
  • Split Phase 的核心概念和应用要点
  • Method Object
  • 在代码的保护下,将代码分层
  • 从缺乏知识的贫血模型的核心概念和应用要点,调整为富含知识的充血模型的核心概念和应用要点
    • 架构现代化
  • 对遗留系统替换(Rebuild/Replace)使用绞杀植物模式
  • 五种策略:
    • Encapsulate:将遗留系统中的数据或者功能封装成 API,供外部调用。
    • Replatform:替换运行时平台。
    • Rehost: 将应用程序或组件部署到其它基础设施中。
    • Refactor/Rearchitect:在不改变业务行为的前提下,对代码或架构进行调整、优化,借此偿还技术债务、提升代码健康度。
  • Refactor:代码级别的重构
  • Rearchitect:架构级别的重构
    • Rebuild/Replace:对遗留系统进行替换。
  • Rebuild: 对应用程序的某个组件或某个服务进行重新设计或重写,但是保留原有的业务功能。
  • Replace: 彻底淘汰应用程序的所有组件,去构建或购买新的软件。同时可能对原有不合理的业务需求进行变更。