在 DDD 领域建模和系统建设过程中,有很多的参与者,包括领域专家、产品经理、项目经 理、架构师、开发经理和测试经理等。对同样的领域知识,不同的参与角色可能会有不同的 理解,那大家交流起来就会有障碍,怎么办呢?因此,在 DDD 中就出现了“通用语 言”和“限界上下文”这两个重要的概念。
这两者相辅相成,通用语言定义上下文含义,限界上下文则定义领域边界,以确保每个上下 文含义在它特定的边界内都具有唯一的含义,领域模型则存在于这个边界之内。你是不是感 觉这么描述很抽象?没关系,接下来我会给你一一详细讲解。
在这之前,我想请你先看这样两个问题,这也是今天内容的核心。
1. 为什么要提出限界上下文的概念(也就是说除了解决交流障碍这个广义的原因,还有更具体的吗)?
2. 限界上下文在微服务设计中的作用和意义是什么?
什么是通用语言?
为了更好地理解限界上下文,回答这两个问题,我们先从通用语言讲起。
怎么理解通用语言这个概念呢?在事件风暴过程中,通过团队交流达成共识的,能够简单、 清晰、准确描述业务涵义和规则的语言就是通用语言。也就是说,通用语言是团队统一的语 言,不管你在团队中承担什么角色,在同一个领域的软件生命周期里都使用统一的语言进行 交流。
那么,通用语言的价值也就很明了了,它可以解决交流障碍这个问题,使领域专家和开发人 员能够协同合作,从而确保业务需求的正确表达。
但是,对这个概念的理解,到这里还不够。
通用语言包含术语和用例场景,并且能够直接反映在代码中。通用语言中的名词可以给领域 对象命名,如商品、订单等,对应实体对象;而动词则表示一个动作或事件,如商品已下 单、订单已付款等,对应领域事件或者命令。
通用语言贯穿 DDD 的整个设计过程。作为项目团队沟通和协商形成的统一语言,基于它, 你就能够开发出可读性更好的代码,将业务需求准确转化为代码设计。
下面我带你看一张图,这张图描述了从事件风暴建立通用语言到领域对象设计和代码落地的 完整过程。