从DDD到Ontology:当数字员工不再认“限界上下文“这堵墙

📅 2026/8/2 11:04:05
从DDD到Ontology:当数字员工不再认“限界上下文“这堵墙
型集团上线了基于OpenClaw.NET的智能数字员工系统。业务负责人以为团队已经按照DDD领域驱动设计方法完成了完整的业务建模——聚合根、领域事件、限界上下文甚至把Entity和Value Object的定义都写进了Skill的Prompt约束里。业务负责人问“6月份新增有效客户有多少”数字员工秒回32.4万环比增长6.7%。SQL完整图表漂亮。业务负责人看了一眼说不对我们经营会上报的是28.6万。技术人员调出数字员工生成的SQL语法没错表也没选错查的是正式生产库权限没问题。问题在哪继续往下查才暴露数字员工按自然月统计经营报表按账期统计数字员工把重新入网的客户算成新增经营口径只认首次成为客户数字员工按账户编号去重业务按统一客户编号去重数字员工还把内部测试号码、员工体验号码算了进去每一个字段都是真的每一条数据都能在数据库里找到。 但数字员工理解的新增有效客户不是这家企业经营管理中使用的新增有效客户。项目负责人说“看来我们缺一层语义层。”这句话没有解决问题反而让会议更乱。BI团队说事实表维度表度量值都建好了这就是语义层指标团队说应该是统一指标口径数据治理团队说业务术语元数据血缘责任人都算AI团队说要补同义词、标准问题、样例SQL、歧义处理规则和拒答策略做数字员工的人又说还要补客户产品订单之间的关系以及可执行动作。所有人说的都是语义层。但他们说的显然不是同一个东西。这个案例揭示了一个DDD从未处理过的问题当执行主体从人变成数字员工业务语义的解释权必须被正式化、结构化、机器可读否则同一个词就是四个答案。第1章DDD做了什么没做什么2003年Eric Evans写下《Domain-Driven Design》给出了一个承诺如果开发者能和领域专家坐在一起用同一套语言描述业务软件就能忠实地映射现实。二十年后这个承诺在OpenClaw.NET的Skill系统里兑现了一半。DDD确实解决了它要解决的问题。统一语言Ubiquitous Language让业务知识从会议室走进了Skill的代码限界上下文Bounded Context让复杂的数字员工系统有了可管理的边界聚合根Aggregate Root让事务一致性有了清晰的边界。在人写Skill代码、人理解业务、人维护数字员工的范式下DDD是过去二十年最有效的建模范式没有之一。但DDD有天花板。这个天花板不是产品质量问题是设计对象的边界问题。DDD的载体是代码。 它的实体是C#类或结构体行为是类的方法规则是if-else和断言。这些代码运行在.NET运行时或容器里由编译器保证语法正确性由测试保证业务逻辑正确性由团队内部的文档和口口相传保证语义一致性。DDD解决的是人和代码之间的语义一致性问题。业务专家说客户开发者写成 Customer 类测试用例验证它的行为——只要团队内部对得上Skill就能正常运行。但DDD有三个它不解决、也解决不了的问题第一它不解决跨Skill的语义统一。 DDD的限界上下文是边界保护机制不是跨边界统一机制。在物流Skill里“订单是发货计划在财务Skill里“订单是应收依据。DDD告诉你这两个订单不一样”但它不帮你建立物流订单和财务订单之间的映射关系”。第二它不解决数字员工的可执行性问题。 DDD的领域模型是给人读的代码。一个数字员工拿到你的 Customer 聚合根它能看到的只是字段列表和方法签名——它不理解 Customer.Status ‘VIP’ 背后的业务含义不知道什么时候调用 ApproveOrder()更不知道为什么 Approve 之前必须先检查 CreditLimit。第三它不解决业务规则的精确表达问题。 DDD的规则写在代码里分散在聚合根的方法体、领域服务的if-else、规约Specification的断言中。这些规则对开发者是清晰的但对业务人员是黑盒。当业务规则变更时你需要找开发者改代码、跑测试、发部署。这三个不解决不是DDD的缺陷是它的设计边界。DDD是为人建模→人编码的范式设计的在这个范式里它做得很好。但2025年之后执行主体变了。OpenClaw.NET的DDD实践三户模型在OpenClaw.NET的电力行业数字员工场景中有一个天然契合DDD的案例——“三户模型”。三户指客户Customer、用电户ServiceLocation/UsagePoint、结算户Account/Agreement。源于电力行业国际标准IEC 61968/61970 CIM。从DDD角度看三户模型的设计几乎就是为聚合根而生的客户聚合根管理客户全生命周期聚合证件信息、联系人、合同关系。用电户聚合根管理物理计量点聚合电表资产、采集关系、用电地址。结算户聚合根管理计费单元聚合银行账户、增值税信息、缴费记录。三个聚合根通过ID引用松耦合通过领域事件保持最终一致性。三户模型是DDD在电力行业最成功的实践之一。但它解决的仍然是人和代码之间的问题——让营销系统的开发者、业务分析师、测试人员对客户“用电户”结算户有统一的理解。DDD让营销系统的代码理解了业务。但它没有让数字员工理解业务。这是DDD的天花板。第2章DDD在数字员工时代的三个断裂DDD的底层假设在数字员工成为执行主体的那一刻开始出现结构性裂缝。不是因为它做错了什么而是因为它的设计对象变了。DDD是为人类建模者设计的——人类会阅读文档、理解上下文、遵守约定。数字员工不会。这不是渐进式优化能解决的问题是结构性的失效。断裂一统一语言失去了统一的对象DDD的核心机制是Ubiquitous Language统一语言。领域专家和开发者通过协商建立一套共享的术语体系然后这套体系同时存在于文档、对话和代码中。这个机制有一个隐含前提所有参与者都是人类都能参与语言协商都能理解术语背后的业务意图。数字员工不参与语言协商。它接收Prompt输出代码但它不理解订单在你的业务中代表什么——它只理解token序列的统计相关性。更致命的是跨限界上下文。一个金融数字员工无法区分booking预订和booking入账因为两个限界上下文中的同一个词被数字员工混为一谈差点导致合规事故。这不是数字员工的bug是DDD的结构性缺陷——Ubiquitous Language假设所有消费者都是语言协商的参与者但数字员工是语言的消费者不是协商者。断裂二限界上下文对数字员工没有约束力Bounded Context是DDD的边界机制。它告诉开发者在这个边界内客户就是这个含义出了这个边界客户可能是另一个含义。这个机制在人类开发者身上有效因为人类会阅读文档、理解上下文、遵守约定。数字员工不遵守约定。它不读你的领域文档不理解你的上下文映射Context Map更不会在跨边界调用时主动使用防腐层Anti-Corruption Layer。一个典型的涌现行为一个优化物流成本的数字员工和一个优化交付速度的数字员工各自在自己的限界上下文中运行良好但它们的独立优化产生了冲突——一个要求低成本一个要求高速度最终把压力传导给了供应商。两个数字员工都正确地执行了自己的任务但系统层面的结果是灾难性的。Bounded Context是给人画的墙。数字员工不认墙它只认Prompt中的指令和训练数据中的模式。断裂三SDLC的阶段划分在数字员工面前崩塌DDD的实践深度绑定在传统软件开发生命周期上需求分析→领域建模→架构设计→编码实现→测试验证。每个阶段都假设人类是执行主体。数字员工打破了这种线性假设。一个AI编程数字员工可以在一次对话中同时完成需求理解、架构决策和代码生成。它不需要先画UML再写代码不需要先写测试再写实现。你给它的是一条模糊的需求描述它返回的是一个可直接运行的Skill——包括聚合根、领域事件、Repository接口。整个过程不超过十分钟。这导致一个更深层的问题DDD的领域模型是设计时的产物它假设模型在编码之前就已经确定。但数字员工的工作方式是运行时建模——它在生成代码的过程中不断调整对领域的理解。设计时的静态模型无法约束运行时的动态生成这就是执行偏差Execution Drift的根源。一个结构性的原因这三个断裂有一个共同的结构性原因DDD的建模主体是人类而数字员工时代的执行主体是机器。抽象层级的差异决定了所有不同DDD 抽象栈 Ontology 抽象栈Skill代码C#/.NET 语义层Ontology DSL / JSON-LD / 元数据编程语言OOP/FP 平台OpenClaw.NET / MetaSkill / Harness运行时.NET Runtime/容器 基础设施TokenHub / 数据湖 / OLTP / OLAPDDD的载体是程序——业务模型靠源代码表达靠编译器和测试保证一致性。Ontology的载体是平台——业务模型靠元数据声明由OpenClaw.NET平台保证一致性。当执行主体从人变成数字员工代码不再是核心产出。数字员工可以直接基于Ontology执行操作代码只是Ontology的一种实现形式甚至可能完全不需要。DDD的领域模型是设计时的静态快照。Ontology是运行时的活领域模型——它随着数字员工的执行不断演化是定义→执行→反馈→修正的闭环。所以呢三个断裂指向同一个结论领域模型在数字员工时代不再扮演桥梁的角色。过去领域模型是连接业务和代码的翻译层——业务专家说客户开发者写成 Customer 类测试保证它是对的。整个链条依赖人类的理解和协作。现在数字员工不需要这座桥。它不读你的领域文档不理解你的限界上下文更不会遵守你的防腐层约定。它走的是另一条路直接从Onto