用途
该技能用于在限界上下文(bounded context)内维护统一的领域语言(ubiquitous language)。其核心主张是:语言的变化就是模型的变化(Evans),因此语言可以演进,但必须通过显式、可记录的决策,而非悄然漂移。它把仓库中声明的术语表(glossary)确立为该限界上下文的命名权威,用于消除诸如 processUserData 与 processUserInfo 这类近似重复,或“booking”在功能开发中途悄悄变成“reservation”的术语漂移问题。
主要能力
- 五步语言协议:检测(DETECT)、提议(PROPOSE)、决策(DECIDE)、记录(RECORD)、重命名(RENAME)。任何新增、变更或可疑的领域术语都必须走完这五步。
- 术语表作为命名权威:仓库声明的术语表决定其限界上下文内的规范拼写与大小写;未出现在术语表中的词意味着“尚未达成一致”,既不自动批准也不自动禁止。
- 可选的术语表驱动 lint 棘轮:在已安装机械执行层的项目中,可对领域路径内的标识符、测试标题、DSL 词汇进行校验,使用词元类别(术语表词、废弃别名、路径范围技术停用词、豁免框架标识符)进行判断。
- 安全重命名:先决策,再在同一可审查变更中一起重构代码、测试和术语表;限界上下文内部可自由重命名,但上下文边界上的发布语言(API、事件、schema)必须谨慎版本化。
- 采用谱系指导:区分绿地项目、棕地项目(受保护核心棘轮)和探索性代码(spike)的不同采用策略。
使用方式
技能包含两个资源文件,按需加载:
resources/language-protocol.md:当术语缺失、别扭或重复时,运行五步协议并记录改变模型的决策。resources/glossary-format.md:创建或编辑术语表时使用,涵盖仓库 schema、可选的 Contextive 示例、上下文范围、别名和引导路径。
协议执行要点:
- 检测:需要术语表没有的词;发现同义词或近似重复(一个概念一个词,两个短语必须意味着两个概念);术语在对话中别扭;或标识符 lint 标记了未知领域词。
- 提议,绝不擅自采用:停下来向人类呈现术语、拟议定义、限界上下文、示例句和考虑过的替代方案。优先使用宿主的结构化提问机制;否则用一条简洁的纯文本问题加建议。智能体绝不静默创造领域术语。
- 决策:人类批准、重命名或拒绝。
- 记录:在同一可审查变更中添加或更新术语表条目;被拒绝或替换的别名指向所属限界上下文和规范术语。改变模型的重命名使用仓库的决策记录机制。
- 重命名:按顺序执行——先决策,再在同一可审查变更中重构代码、测试和术语表。
适用场景
- 命名领域概念时。
- 术语缺失于术语表或与术语表冲突时。
- 发现同义词或近似重复时。
- 引导建立术语表时。
- 跨限界上下文重命名时。
限制
- 在项目未安装生成式 lint 层或等效门禁前,技能中的所有内容仅为约定,不得暗示存在实际保护。
- 即使 lint 命令通过,也只能报告其配置的路径和词元类别;定向棘轮不等于证明整个仓库的语言使用正确。
- 每个语言守卫都需要阳性对照:一个引入已知禁止词汇的 fixture 或聚焦测试,证明守卫会失败并给出所属上下文和规范替换。仅扫描当前树未发现问题,只能证明扫描器完成了工作。
- 棕地执行必须限定范围,基线不得静默增长,并需报告其限制。
- 探索性代码的临时词汇在提升为维护代码前必须经过协议批准或替换。
边界
- 值对象、实体、聚合、限界上下文:参见
domain-driven-design。 - 端口/适配器结构及架构规则:参见
hexagonal-architecture。 - 外层循环的 DSL 和测试标题词汇:使用项目相关的验收/规格技能。
- 记录改变模型的重命名:使用仓库的决策记录机制。
- 发现阶段的命名问题:使用宿主可用的提问机制。