深入实践DDD:以DSL驱动复杂软件开发
上QQ阅读APP看书,第一时间看更新

1.4.4 统一语言

领域驱动设计的一个核心原则是使用一种基于模型的语言——统一语言(Ubiquitous Language)。

统一语言使用模型作为语言的主干,团队在进行所有的交流时都应该使用它。在共享知识和推敲模型时,团队在PPT、文字和图形中使用它。程序员在代码中也要使用它。

为了创建团队的统一语言,我们需要发现领域和模型的那些关键概念(其中有些概念可能很不容易被发现),并找到适合描述它们的词汇,然后开始尽可能多地使用它们。

统一语言为何如此重要?众所周知,在复杂软件系统的开发过程中,大量甚至是大部分的时间和资源都消耗在思想的沟通和确认上了。统一语言基于“模型”,精心构建的模型归纳总结了各方对领域的一致认知,统一的“说法”可避免歧义、减少沟通中的误解。所以,统一语言可以成为各方(业务人员、领域专家、产品人员、开发人员、测试人员)进行高效沟通的基础,从而极大地节约软件开发的成本。

在实践上,我们建议使用一个简洁的词汇表来记录一个上下文的统一语言中的那些关键概念。

比如,表1-1是GitHub.com的reactive-streams/reactive-streams-jvm[1]代码库中一个词汇表的一部分。

表1-1 一个英文词汇表的示例

对于主要由母语为中文的开发人员组成的团队来说,建议在软件开发项目中使用中英文对照的词汇表,并且建议在词汇表中强调词条的词性(名字、动词、形容词等),甚至名词的单复数形式等。因为在中文中很多词语的词性都是模糊和多变的,需要根据上下文去辨别,母语为中文的开发人员在文档和代码中使用错误的词性的情况实在太过常见。表1-2是中英文对照的词汇表的一个例子,也许可供借鉴。

表1-2 一个中英文对照词汇表的示例

[1] Reactive Streams Specifi cation for the JVM, https://github.com/reactive-streams/reactive-streams-jvm。