news 2026/5/1 9:25:07

AI时代的领域驱动设计:DAD

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI时代的领域驱动设计:DAD

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

传统 DDDDAD
方法调用语义消息
DTO 耦合意图解耦
聚合根为中心Actor 为中心
状态快照事件溯源
应用层编排Actor 自治

七、总结一句话

AI Actor 并不是“加了 AI 的 Actor”,
而是让“理解”成为系统的一等公民。

  • Agent 负责理解、校验、表达

  • MCP 负责确定性领域演化

  • 事件溯源负责记忆与可追溯性

这,才是AI 时代的领域驱动设计:DAD

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:17:40

MinerU部署优化案例:小显存GPU也能跑通PDF提取任务

MinerU部署优化案例:小显存GPU也能跑通PDF提取任务 PDF文档的结构化信息提取一直是个让人头疼的问题——多栏排版错乱、表格识别失真、公式变成乱码、图片位置漂移……传统工具要么精度差,要么依赖大量人工校对。而MinerU 2.5-1.2B的出现,让…

作者头像 李华
网站建设 2026/5/1 3:24:05

Llama3-8B部署需要多少显存?FP16与INT4对比详解

Llama3-8B部署需要多少显存?FP16与INT4对比详解 1. Meta-Llama-3-8B-Instruct:一张3060就能跑的实用级大模型 你是不是也遇到过这样的困扰:想本地部署一个真正能干活的大模型,结果发现动辄需要2A100起步,显存告急、电…

作者头像 李华
网站建设 2026/5/1 7:51:20

【2026】 LLM 大模型系统学习指南 (16)

训练神经网络的实战诀窍:从稳定收敛到高效泛化 训练神经网络就像培育植物 —— 不仅需要 “好种子”(优质模型结构),更需要 “合适的土壤、阳光和浇水节奏”(数据处理、参数设置、训练策略)。很多时候&…

作者头像 李华
网站建设 2026/5/1 7:53:09

fft npainting lama企业内网部署:防火墙穿透配置技巧

fft npainting lama企业内网部署:防火墙穿透配置技巧 1. 引言:为什么需要在企业内网部署图像修复系统? 在实际业务中,越来越多团队开始使用AI进行图像处理,比如去除水印、移除干扰物体、修复老照片等。但出于数据安全…

作者头像 李华
网站建设 2026/4/30 21:06:38

基于spring的旅游餐饮管理系统[spring]-计算机毕业设计源码+LW文档

摘要:随着旅游业的蓬勃发展,旅游餐饮服务的管理面临着效率与服务质量提升的迫切需求。本文旨在设计并实现一个基于Spring框架的旅游餐饮管理系统,通过整合旅游资源与餐饮服务信息,利用信息化手段提升管理效率与游客体验。本文详细…

作者头像 李华
网站建设 2026/5/1 7:50:15

Qwen1.5-0.5B日志分析:错误排查步骤详解

Qwen1.5-0.5B日志分析:错误排查步骤详解 1. 为什么日志分析是Qwen轻量服务落地的关键一环 当你在CPU环境里跑起Qwen1.5-0.5B,看到终端第一行Loading model...缓缓滚动,心里可能已经松了口气——模型加载成功了。但真正决定这个“轻量全能服…

作者头像 李华