只要搞过后端架构的人,多少都经历过这种尴尬:DDD(领域驱动设计)的书翻了好几遍,事件风暴工作坊也开过,架构评审会上大家点头如捣蒜。结果代码一开工,写着写着又变回了三层架构,领域层被Service掏空成贫血模型,聚合根只剩一堆getter/setter。DDD不是不好,是落地的成本实在太高了,高到大多数团队撑不过前三个迭代。
所以我搞了个小项目,叫cleanddd-skills。思路很直接:既然人肉遵守规范的成本这么高,那就把这些规范翻译成AI能读懂、能执行的技能包,让AI编程工具在产出代码的时候,天然带上DDD的约束。这篇文章就把这个项目的设计思路、技能包的长什么样、以及我实际操作中的一套完整流程,全部摊开来讲。适合正在做DDD转型、或者被AI生成的“四不像”代码搞到头大的后端团队参考。
1. 先聊清楚:DDD难落地,到底难在哪
1.1 难点一:建模过程太依赖“老司机”
DDD的建模方法论本身不复杂,核心就是找限界上下文、画上下文映射、做事件风暴、识别聚合。听着挺像那么回事,做起来完全是另一码事。
最扎心的一个场景是:事件风暴工作坊上,业务专家、产品经理、开发围坐一圈,黄色便签贴了一整面墙。开发问“订单取消这个事件,取消的原因算值对象还是实体”,业务方一脸茫然;业务方说“我们就是支持客户提交申请之后可以撤回”,开发立刻开始纠结“撤回”和“取消”到底是不是同一个领域事件。这种语言层面的错位,如果没有一个经验丰富的DDDer在中间做翻译和引导,会议大概率会变成需求澄清会,最后产出物跟普通PRD没有任何区别。
而且即便建模当时是清楚的,从“墙上的便签”到“代码里的聚合”,中间还有一条巨大的鸿沟。建模画出来的聚合边界,落到代码里往往就被一个UserService、OrderService给揉碎了。这里面的关键问题不是大家不懂DDD,而是缺少一个能把“建模语言”持续翻译成“代码约束”的工具。
1.2 难点二:代码层面缺少持续约束,写着写着就“腐化”
DDD进入编码阶段后,真正的考验才刚开始。聚合根内部状态应该由行为方法保护,结果为了前端方便,给实体加了public setter;领域服务应该表达业务编排,结果把所有逻辑塞进应用服务,应用服务反过来依赖基础设施,形成依赖倒置。这些坏味道不是一次写崩的,而是在几十个迭代里一点点“腐化”出来的。
你当然可以说“我们有Code Review”。但现实是,大部分团队的Code Review都在看“这个功能对不对”,很少有人会逐行检查“这个聚合是否暴露了不该暴露的setter”、“这个仓库接口是否被应用层直接实现给绕过去了”。DDD约束本质上是一种全局性、结构性约束,靠人眼去盯着,覆盖率一定是不足的。
1.3 为什么AI能在这个环节“打辅助”
我试过让AI直接从一个需求描述生成完整业务系统,效果只能说是“看起来合理,实际不能细看”。但AI有个长处非常难得:你给它一套明确的规则,它能像强迫症一样严格执行,而且从不觉得烦。
DDD落地的痛点,恰好就是“需要有人不厌其烦地执行规则”。AI当然不能替代领域专家,但它可以成为那个“随时在线、永不疲倦的规范执行器”。你在需求描述后面追加一段“按DDD规则建模”的指令,AI就会老老实实地按照聚合、值对象、领域事件的框架去思考和产出;你在项目里放好一条“禁止在实体上暴露public setter”的规则,AI生成的代码就不会违反这条约束。
这就是cleanddd-skills的核心逻辑:把DDD落地的各种规范、检查清单、坏味道案例,结构化成一个AI能直接调用的“技能包”。AI不用再猜“DDD到底要怎么落地”,它只需要按照技能包里写的步骤和规则去工作。
1.4 这个项目跟我见过的其他方案有什么不同
市面上关于“AI+DDE”的方案,大多停留在“写提示词”的层面。比如有人会分享一个很长的prompt,让AI扮演DDD专家。但单一的提示词有两个问题:一是太长,超过上下文窗口之后效果急剧下降;二是不可维护,改一条规则就要把整个prompt翻出来重新改一遍。
cleanddd-skills的做法是模块化。把“建模引导”、“代码生成”、“代码审查”、“上下文映射”拆成独立的技能文件,每个技能文件负责一个环节,AI按需加载。你可以单独使用“审查技能”去扫描旧代码,也可以把“建模技能”和“编码技能”串联起来,形成一条完整的DDD流水线。这种拆分方式,不管是对团队协作还是后续更新,都要比“一个大而全的提示词”靠谱得多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. cleanddd-skills的整体设计与核心模块
2.1 Skills机制到底是什么:给AI装一套“岗位SOP”
如果你已经用过Claude Code、Cursor这类AI编程工具,应该对Skills概念不陌生。简单来说,一个Skill就是一组包含“指令说明+参考规则+示例模板”的文件目录,AI在执行相关任务时会自动读取这个目录下的规则文件,从而获得该领域的“专业知识”。
打个比喻:你新招了一个开发,他不会自动知道你们团队的规范,你得给他发一份岗位SOP。Skills就是这份SOP,而且不是写给人看的,是给AI读的。我做的cleanddd-skills,就是把DDD实践者的经验,整理成四个Skill文件包,每个包都有明确的触发场景、执行步骤、检查清单和反例库。
项目结构上是这样的:
text复制cleanddd-skills/
├── ddd-modeling/
│ ├── SKILL.md
│ ├── checklists/
│ │ ├
