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

本文提出一种面向 AI 时代的领域驱动设计范式:DAD(Domain Actor Design),其核心系统单元是 AI Actor


一、从 Actor 模型说起:为什么领域需要 Actor

1️⃣ 经典 Actor 模型解决了什么

Actor 模型的基本原则很简单:

  • Actor 是独立执行单元

  • 只通过消息通信

  • 内部状态对外不可见

  • 消息进入邮箱(Mailbox),串行处理

它解决的是两个老问题:

  • 并发下的共享状态复杂性

  • 组件之间的直接方法调用耦合

Actor 不关心“谁调用我”,
只关心“我收到了什么消息”。


2️⃣ 传统 DDD + 消息的问题并没有真正消失

在现实系统中,即便你引入了消息:

  • 消息仍然是强结构化的 DTO

  • 接收方必须精确知道结构

  • 发送方必须知道对方能处理什么结构

结果是:

领域对象之间的耦合,从方法调用,转移成了消息结构耦合

这在系统规模变大后,会产生三个致命问题:

  1. 消息结构成了隐形契约

  2. 跨领域演化成本极高

  3. 系统无法容忍“不完美消息”


二、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 协议适配

  • 不关心消息来源

它只关注三件事:

  1. 当前状态

  2. 输入命令

  3. 状态如何变化


四、为什么 MCP 必须配合事件溯源存储

1️⃣ 传统 DDD 存储的问题

传统做法是:

  • 聚合根 → ORM → 表

  • 状态是“当前快照”

问题在 AI 时代被放大了:

  • 无法解释“为什么会变成现在这样”

  • 无法回放 Agent 决策上下文

  • 无法支持模型迭代后的再推演


2️⃣ 事件溯源是 AI Actor 的天然存储方式

在 DAD 中:

  • 状态 = 事件序列的结果

  • 每一次 MCP 执行:

    • 消费一个命令

    • 产生一组领域事件

事件记录的是:

  • 发生了什么

  • 在什么上下文下发生

  • Actor 的状态如何演进

👉 这带来三个直接收益:

  1. 完整决策可追溯

  2. 支持 AI 逻辑重放 / 校正

  3. 代码与数据逐步融合


五、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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐