mcpField
D
ddd-ubiquitous-language

ddd-ubiquitous-language

github.com/yonatankarp开发144 次安装23 周前更新
代码仓库

关于 ddd-ubiquitous-language

帮助领域专家与开发者在限界上下文内统一词汇的技能,说明如何将领域术语落实到代码和测试中,并避免同义词及全企业统一术语。

主要功能

  1. 01建立共享的领域词汇
  2. 02在代码和测试中使用领域术语
  3. 03将语言限定于限界上下文
  4. 04识别同义词与命名偏差

适用场景

  1. 01启动新项目的领域建模
  2. 02解决业务与工程术语偏差
  3. 03使代码命名符合领域专家用语

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/yonatankarp/software-design-skills --skill ddd-ubiquitous-language

安装后在 Claude Code 中输入/ddd-ubiquitous-language确认已加载。

详细介绍

一句话概述

在一个限界上下文中,建立一套由领域专家、开发人员、代码和测试共同使用的词汇。

何时使用此技能

  • 新项目开始构建领域模型时。
  • 业务与工程之间的术语长期不一致时。
  • 代码中的命名与领域专家的表达不符时。
  • 对话与代码之间存在翻译表(“业务说‘发票’时,我们指的是 BillingDocument”)。

何时不使用此技能

  • 代码层面的模式问题 → 委派给战术模式技能。
  • 跨上下文的术语翻译 → 转交给 ddd-context-mapping。
  • 通用的变量和函数命名约定 → 这是代码风格问题,不属于 DDD。

核心内容

通用语言是领域专家和工程师用来讨论模型的、共享且精确的词汇,并且这些词汇会原样出现在代码、测试、数据库和 UI 中。它不是团队约定查阅的术语表,而是他们实际使用和书写的语言。

如何逐步建立通用语言。 倾听领域专家的表达,并原样记录,不要改述。当专家说“结算一笔付款”时,代码中就应有一个名为 settle 的方法,而不是 processPayment。当专家对某个术语意见不一时,要促使他们达成一致——这种分歧隐藏着真正的区别(通常是两个概念被塞进了同一个词里)。

按限界上下文划分。 通用语言在一个限界上下文内保持一致。两个上下文可以用同一个词表达不同的含义,这没有问题——上下文映射负责处理翻译。错误在于试图强制整个企业统一使用一套语言。

朗读测试。 选取一段代码(方法体、测试名称或类层次结构),大声读给领域专家听。如果他们能理解代码的作用,说明语言有效。如果他们问“这是什么意思?”,说明语言已经偏离模型。

决策启发

  • 在限界上下文内部应用。避免试图统一整个企业的语言。
  • 开发人员自行创造名称(“Manager”“Helper”“Processor”),而不是询问专家该如何称呼这个概念时,要提出异议。
  • 坚决消除同义词。在一个上下文中,“Customer”“Client”和“Account”不应同时存在并表示同一事物。

反模式

  • 开发人员因为觉得“询问专家太费时间”而自行创造名称。
  • 因为各团队偏好不同,就容忍同义词共存。
  • 在对话与代码之间维护翻译表——这说明模型存在偏差。
  • 将术语表作为独立文档维护,而不是让代码本身成为术语表。

另请参阅

  • ddd-bounded-context — 每个上下文使用一套语言;明确边界才能形成连贯的语言。
  • ddd-design — 语言是任何设计会议的首要产出。
  • ddd-context-mapping — 在不同上下文之间翻译语言。

参考资料

  • Evans,《领域驱动设计》(2003),第 2 章(沟通与语言的运用)。

评论

支持 Markdown