当系统开始面对不确定输入、不确定协作对象、不确定业务演化速度时,
结构化消息 + 强耦合领域模型已经不再适合 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。