| name | ddd-refactoring |
| description | 遗留系统向 DDD 迁移重构指南。适用场景:老项目从传统三层架构向 DDD 改造、贫血模型升级为富模型、识别核心域与重构优先级、Strangler Fig 模式应用。当用户提到 DDD 重构、遗留系统改造、贫血模型修复、老项目升级时使用。 |
DDD 重构迁移
老项目 DDD 化路径
现状分析 → 领域识别 → 上下文划分 → 增量重构 → 防腐层建立 → 聚合拆分 → 领域模型升级
核心策略:Strangler Fig 模式
通过在遗留系统外围逐步构建新代码,逐步替换旧系统,而非一次性重写。
旧系统 新系统(DDD)
┌──────────┐ ┌────────────────────┐
│ 遗留 │ │ 防腐层 (ACL) │
│ 系统 │ └────────────────────┘
│ │ ↑
│ │ ┌──────┴──────┐
└──────────┘ │ DDD 新代码 │
↑ │ (按限界上下文)│
└──────────┴─────────────┘
三步走策略:
- 隔离:在遗留系统外围创建防腐层,明确边界
- 生长:在新代码中按 DDD 模式实现新功能
- 替换:逐步将遗留功能迁移到新代码,断开防腐层
增量迁移策略
阶段一:现状分析
- 理解现有系统的业务逻辑
- 识别最频繁变更的区域(承压点)
- 找到业务价值最高、最需要 DDD 建模的部分
阶段二:领域识别
- 与业务专家沟通,理解核心业务概念
- 从现有数据库表结构反推领域模型
- 识别核心域、支撑域、通用域
阶段三:上下文划分
- 识别限界上下文候选
- 确定上下文间的集成关系
- 为每个上下文建立通用语言
阶段四:增量重构
从核心域开始,一个聚合一个聚合地重构:
- 识别现有 Service 中的业务逻辑归属
- 将逻辑下沉到对应的领域模型
- 建立防腐层,保护新代码不被旧模型污染
阶段五:聚合拆分
对万能聚合进行拆分:
- 识别聚合内耦合紧密的对象
- 拆分出独立的聚合
- 通过领域事件保持最终一致性
重构顺序建议
| 优先级 | 区域 | 理由 |
|---|
| 1(最高) | 核心业务域 | 业务价值最高,DDD 收益最大 |
| 2 | 高频变更区域 | 维护成本高,DDD 提升可维护性 |
| 3 | 外部依赖密集区 | 防腐层收益明显 |
| 4 | 支撑域 | 有余力时重构 |
| 5(最后) | 通用域 | 尽可能复用现有方案 |
参考资料