AI时代的领域驱动设计:DAD
当系统开始面对不确定输入、不确定协作对象、不确定业务演化速度时, 结构化消息 + 强耦合领域模型 已经不再适合 AI 时代。 本文提出一种面向 AI 时代的领域驱动设计范式:DAD(Domain Actor Design),其核心系统单元是 AI Actor。 一、从 Actor 模型说起:为什么领
当系统开始面对不确定输入、不确定协作对象、不确定业务演化速度时,
结构化消息 + 强耦合领域模型 已经不再适合 AI 时代。
本文提出一种面向 AI 时代的领域驱动设计范式:DAD(Domain Actor Design),其核心系统单元是 AI Actor。
一、从 Actor 模型说起:为什么领域需要 Actor
1️⃣ 经典 Actor 模型解决了什么
Actor 模型的基本原则很简单:
-
Actor 是独立执行单元
-
只通过消息通信
-
内部状态对外不可见
-
消息进入邮箱(Mailbox),串行处理
它解决的是两个老问题:
-
并发下的共享状态复杂性
-
组件之间的直接方法调用耦合
Actor 不关心“谁调用我”,
只关心“我收到了什么消息”。
2️⃣ 传统 DDD + 消息的问题并没有真正消失
在现实系统中,即便你引入了消息:
-
消息仍然是强结构化的 DTO
-
接收方必须精确知道结构
-
发送方必须知道对方能处理什么结构
结果是:
领域对象之间的耦合,从方法调用,转移成了消息结构耦合
这在系统规模变大后,会产生三个致命问题:
-
消息结构成了隐形契约
-
跨领域演化成本极高
-
系统无法容忍“不完美消息”
二、DAD 的核心单元:AI Actor
在 DAD 中,领域的最小自治单元不是 Aggregate,而是 AI Actor。
AI Actor = Agent + MCP 领域服务
这不是概念拆分,而是职责强制隔离。
三、AI Actor 的两个组成部分
1️⃣ Agent:语义层、边界层、对话层
Agent 不做领域业务,只做三件事:
✅ 1. 语义解析与校验(前置)
-
接收外部消息(通常是 JSON)
-
判断:
-
对方想干什么
-
信息是否语义完整
-
是否符合当前 Actor 的能力边界
-
消息“结构正确”≠“语义合法”
如果不合法:
-
直接返回语义化错误
-
不会进入邮箱
-
不会污染领域状态
👉 这一步的意义非常关键:
Mailbox 里只能放“可以被处理的意图”
✅ 2. 意图映射为领域命令
通过 Agent:
-
将模糊或多样的请求
→ 映射为 Actor 内部可识别的领域命令
此时才进入 Actor 的 Mailbox 排队处理。
✅ 3. 结果语义化与对外表达(后置)
当领域处理完成后:
-
MCP 只返回领域结果
-
Agent 负责:
-
翻译结果
-
解释状态变化
-
构造对外的语义响应消息
-
MCP 不知道“对方是谁”
Agent 决定“如何把结果讲清楚”
2️⃣ MCP 领域服务:确定性、可追溯、可演化
MCP(Model Context Protocol)领域服务的特点是:
-
只处理确定的领域命令
-
不解析语义
-
不做 IO 协议适配
-
不关心消息来源
它只关注三件事:
-
当前状态
-
输入命令
-
状态如何变化
四、为什么 MCP 必须配合事件溯源存储
1️⃣ 传统 DDD 存储的问题
传统做法是:
-
聚合根 → ORM → 表
-
状态是“当前快照”
问题在 AI 时代被放大了:
-
无法解释“为什么会变成现在这样”
-
无法回放 Agent 决策上下文
-
无法支持模型迭代后的再推演
2️⃣ 事件溯源是 AI Actor 的天然存储方式
在 DAD 中:
-
状态 = 事件序列的结果
-
每一次 MCP 执行:
-
消费一个命令
-
产生一组领域事件
-
事件记录的是:
-
发生了什么
-
在什么上下文下发生
-
Actor 的状态如何演进
👉 这带来三个直接收益:
-
完整决策可追溯
-
支持 AI 逻辑重放 / 校正
-
代码与数据逐步融合
五、AI Actor 的完整消息处理流程(重点)
下面是完整、闭环、不缺角色的流程。
🔁 AI Actor 消息处理生命周期
① 消息到达 Actor 边界
-
来自用户 Actor
-
来自其他领域 Actor
-
来自外部系统
形式可能是 JSON,但不是结构校验阶段
② Agent 进行语义解析与校验(前置关卡)
Agent 判断:
-
意图是否明确
-
参数是否语义完整
-
是否在当前 Actor 的职责范围内
❌ 不合格:
-
直接返回语义错误
-
说明:
-
缺什么
-
错在哪里
-
应该如何修正
-
✅ 合格:
-
生成标准化领域命令
③ 命令进入 Mailbox 排队
此时进入的是:
“已被理解、已被验证的意图”
Mailbox 保证:
-
串行
-
可持久化
-
Actor 重启不丢失
④ MCP 领域服务执行命令
-
读取当前状态(由事件还原)
-
执行业务规则
-
产生新的领域事件
⑤ 事件持久化(事件溯源)
-
事件写入存储
-
Actor 状态更新
⑥ MCP 返回执行结果给 Agent
这里只是领域结果,不包含对外语义。
⑦ Agent 语义化结果并返回消息
Agent:
-
将结果转换为对方能理解的语义消息
-
可以是:
-
成功解释
-
状态变化说明
-
后续建议操作
-
六、DAD 的本质变化
| 传统 DDD | DAD |
|---|---|
| 方法调用 | 语义消息 |
| DTO 耦合 | 意图解耦 |
| 聚合根为中心 | Actor 为中心 |
| 状态快照 | 事件溯源 |
| 应用层编排 | Actor 自治 |
七、总结一句话
AI Actor 并不是“加了 AI 的 Actor”,
而是让“理解”成为系统的一等公民。
-
Agent 负责理解、校验、表达
-
MCP 负责确定性领域演化
-
事件溯源负责记忆与可追溯性
这,才是 AI 时代的领域驱动设计:DAD。
更多推荐



所有评论(0)