定义
在限界上下文之内的每种领域术语,词组或句子,都可以看做通用语言。它们在同一个上下文中具有唯一确定的含义,在限界上下文之外,它们可能表达不同的含义。所以,我们在确定通用语言时,需要保证它们的含义明确,不模糊。
用途
通用语言是一种团队共享的语言。领域专家和开发者使用相同的通用语言进行沟通,所以通用语言不是一种业务语言,它也不完全是采用工业标准术语,更加不是一种编程语言。
案例
在编程时,我们很容易使得代码变成一个贫血模型,使之丢失很多的业务概念。通常这类代码随着版本迭代,很容易变成难以维护,如果代码开发人变更了,新的开发非常困难去理解其中的含义。比如下面的例子。
通用语言:“父亲送儿子一套史诗皮肤”
可能描述 | 业务代码 |
---|---|
写代码就OK了,管它用啥通用语言呢 | children.setPresenter(father); children.setSkin(Skin.EPIC); |
儿子得到一套皮肤 好了一点,不过还是丢失了很多概念 | children.obtainSkin(); |
父亲送儿子一套史诗皮肤 | Skin skin = Skin.EPIC; father.presenterSkinToChilren(children,skin); |
从上面的表格中我们不难看出,当我们使用通用语言去描述一个用例并且严格按照其进行开发时,我们可以开发出领域专家和开发人员都易懂的代码。可能描述一的实现就是典型的贫血模型,在实体中充满了get/set方法,这样的get/set方法不具备业务含义,久而久之,我们很容易忘记最初的业务含义。所以我们开发的过程中需要尽量避免这类操作。
通用不等于万能
关于通用语言这里有几点需要澄清。
- 通用的意思是普遍的,通用语言在团队内部使用,并且只表达一个单一的领域模型
- 限界上下文与通用语言存在一对一的关系
- 只有当团队工作在一个独立的限界上下文中时,通用语言才是通用的。
- 如果你试图将通用语言运用到整个企业范围或者更大的,跨企业时,你将失败。