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