DDD 战略设计:建立统一语言

1 如何理解“统一语言”

  • 统一语言是提炼领域知识的产出物,获得统一语言就是需求分析的过程,也是团队中各个角色就系统目标、范围与具体功能达成一致的过程。
1.1 为什么使用“统一语言”

开发人员与领域专家之间,他们掌握的知识存在巨大的差异。善于技术的开发人员关注于数据库、通信机制、集成方式与架构体系,而精通业务的领域专家对这些却一窍不通,但他们在讲解业务知识时,使用各种概念如呼吸一般自然,这些对于开发人员来说,却成了天书,这种交流就好似使用两种不同语言的外国人在交谈。在没有达成一致的情况下,那就是鸡同鸭讲,毫无沟通效率,相反还可能造成误解。

从需求中提炼出统一语言,其实就是在两个不同的语言世界中进行正确翻译的过程。

1.2 “统一语言”用处

一旦确定了统一语言,无论是与领域专家的讨论,还是最终的实现代码,都可以通过使用相同的术语,清晰准确地定义领域知识。重要的是,当我们建立了符合整个团队皆认同的一套统一语言后,就可以在此基础上寻找正确的领域概念,为建立领域模型提供重要参考。


统一语言体现在两个方面:

  • 统一的领域术语

领域术语通常表示对象命名,如商品、订单等,对应实体对象

  • 领域行为描述

领域行为通常表示一个动作或事件,如商品已下单、订单已付款等,对应领域事件或者命令

2 统一的领域术语

领域术语是有行业规范的,例如财会领域就有标准的会计准则,对于账目、对账、成本、利润等概念都有标准的定义,在一定程度上避免了分歧。然而,标准并非绝对的,在某些行业甚至存在多种标准共存的现象。

  • 民航业的运输统计指标为例,牵涉到与运量、运力以及周转量相关的术语,就存在 ICAO(International Civil Aviation Organization,国际民用航空组织)与IATA(International Air Transport Association,国际航空运输协会)两大体系,而中国民航局又有自己的中文解释,航空公司和各大机场亦有自己衍生的定义

城市对与航段

DDD 战略设计:建立统一语言_第1张图片
领域术语.jpg
  • 如果我们不明白城市对运量与航段运量的真正含义,就可能混淆这两种指标的统计计算规则。这种术语理解错误带来的缺陷往往难以发现,除非业务分析人员、开发人员与测试人员能就此知识达成一致的正确理解。

我们可以做什么

  • 在领域建模过程中,我们往往需要在文档中建立一个大家一致认可的术语表。

  • 语表中需要包括整个团队精炼出来的术语概念,以及对该术语的清晰明白的解释。

  • 为难以理解的术语提供具体的案例。

  • 一旦发生变更,也需要及时地对其进行更新。

  • 在维护领域术语表时,一定需要给出对应的英文术语,否则可能直接影响到代码实现。

3 领域行为描述

领域行为描述可以视为领域术语甄别的一种延伸。领域行为是对业务过程的描述,相对于领域术语而言,它体现了更加完整的业务需求以及复杂的业务规则。在描述领域行为时,需要满足以下要求:

  • 从领域的角度而非实现角度描述领域行为
  • 若涉及到领域术语,必须遵循术语表的规范
  • 强调动词的精确性,符合业务动作在该领域的合理性
  • 要突出与领域行为有关的领域概念

4 小结

磨刀不误砍柴工,多花一些时间去打磨统一语言,并非时间的浪费,相反还能改进领域模型乃至编码实现的质量,反过来,领域模型与实现的代码又能避免统一语言的“腐化”,保持语言的常新。重视统一语言,就能促成彼此正面影响的良性循环;否则领域模型与代码会因为沟通不明而泥足深陷,就真是得不偿失了。

你可能感兴趣的:(DDD 战略设计:建立统一语言)