7Working Effectively with Legacy Code

大型遗留系统

系统级策略

系统理解架构恢复渐进式重写绞杀者模式

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第7章:大型遗留系统(Large Legacy Systems)

一、导读

1.1 本章学习目标

第7章讲解系统级别的遗留代码策略——如何理解和改善大型遗留系统。

本章的核心学习目标包括:

  • 理解大型遗留系统的特征
  • 掌握系统理解的技术
  • 学会渐进式重写策略
  • 理解绞杀者模式的系统级应用

1.2 为什么本章如此重要

大型遗留系统不是"大号的遗留代码"——它有独特的挑战:团队知识流失、文档缺失、架构腐化、依赖关系复杂。需要系统级的策略来应对。

1.3 核心问题引导

如何理解一个没有文档的大型系统?

渐进式重写和大规模重写各有什么风险?

绞杀者模式如何应用到系统级别?

如何在维护遗留系统的同时推进现代化?


二、核心概念详解

2.1 系统理解技术

理解遗留系统的方法:
1. 架构考古:通过代码和提交历史恢复架构理解
2. 依赖分析:使用工具分析模块间依赖
3. 运行时分析:通过日志和监控理解系统行为
4. 团队访谈:与老员工交流获取隐性知识
5. 文档挖掘:寻找任何可用的文档

2.2 渐进式重写

渐进式重写策略:

1. 绞杀者模式(Strangler Fig)
   - 新功能用新系统实现
   - 逐步将旧功能迁移到新系统
   - 最终替换整个旧系统

2. 分支抽象(Branch by Abstraction)
   - 在旧代码和新代码之间引入抽象层
   - 逐步将流量从旧代码切换到新代码
   - 可以按百分比灰度切换

3. 领域驱动迁移
   - 按业务领域逐步迁移
   - 每个领域独立迁移和验证
   - 使用防腐层隔离新旧系统

2.3 绞杀者模式实践

阶段1:识别边界
  - 分析旧系统的模块和依赖
  - 确定可以独立迁移的部分
  - 设计新系统的架构

阶段2:建立基础设施
  - 搭建新系统的开发环境
  - 建立 CI/CD 管道
  - 设置监控和日志

阶段3:逐步迁移
  - 新功能在新系统实现
  - 按领域逐步迁移旧功能
  - 使用 API 网关路由流量

阶段4:完成迁移
  - 所有功能迁移到新系统
  - 旧系统下线
  - 团队完全切换到新技术栈

2.4 防腐层

java
// 防腐层:隔离新旧系统
public class LegacySystemAdapter {
    private LegacySystem legacy;
    
    // 将旧系统的接口转换为新系统的接口
    public NewUser getUser(String id) {
        LegacyUser legacyUser = legacy.findUser(id);
        return new NewUser(
            legacyUser.getId(),
            legacyUser.getName(),
            legacyUser.getEmail()
        );
    }
    
    // 处理新旧系统的数据差异
    public Order createOrder(NewOrderRequest request) {
        // 转换数据格式
        LegacyOrder legacyOrder = convert(request);
        // 调用旧系统
        LegacyOrder result = legacy.createOrder(legacyOrder);
        // 转换结果
        return convert(result);
    }
}

三、实战案例

3.1 案例一:大型电商系统迁移计划

迁移计划:

第1阶段(1-3月):基础设施
  - 搭建新系统(微服务架构)
  - 建立 API 网关
  - 设置监控和日志

第2阶段(4-6月):独立领域
  - 迁移用户管理(独立模块)
  - 迁移商品目录(独立模块)
  - 使用防腐层与旧系统集成

第3阶段(7-12月):核心领域
  - 迁移订单系统(核心但可隔离)
  - 迁移支付系统(需要双写验证)
  - 灰度切换,逐步增加流量

第4阶段(13-18月):完成迁移
  - 迁移剩余功能
  - 旧系统下线
  - 全量切换到新系统

四、本章小结

系统理解:架构考古、依赖分析、运行时分析、团队访谈。

渐进式重写:绞杀者模式、分支抽象、领域驱动迁移。

防腐层:隔离新旧系统,处理数据差异。

迁移策略:分阶段、按领域、灰度切换。


五、思考与练习

为一个大型遗留系统制定迁移计划。

绞杀者模式和分支抽象各适用于什么场景?

如何在迁移过程中保证系统可用性?


7/7大型遗留
0%