DDD - 理论到落地从统一语言开始

简介: DDD - 理论到落地从统一语言开始


1. 什么是统一语言

DDD 战略设计的第一步就是统一语言,也叫通用语言(UBIQUITOUS LANGUAGE),用于定义上下文的含义。

  • 定义:提炼领域知识的产出物,体现在两个方面:① 统一的领域术语;②领域行为描述。
  • 如何获取:统一语言就是需求分析的过程,也是团队中各个角色就系统目标、范围与具体功能达成一致的过程。
  • 强调统一:无论是与领域专家的讨论,还是最终的实现代码,都使用相同的术语。
  • 强调约束:既要有内涵也要有外延。

定义上下文的含义:在事件风暴中,通过团队交流达成共识的,能简单清晰准确地描述业务含义和规则的言语就是通用语言。

注意:通用语言贯穿 DDD 的整个设计过程。作为项目团队沟通和协商形成的统一语言,在说某通用语言时,必须要限定在某个上下文内,以确保每个上下文含义在它特定的边界内都有唯一的含义。

2. 通用语言从哪里来

如果我们长期处于某个领域的话,肯定会有一些俗语,俗话,术语,常用语,技术用语,活动概念。如果在领域专家和开发人员之间也能建立一种语言,是不是就可以让他们使用这种语言进行交流,进而解决沟通不顺畅的问题。

3. 通用语言与DSL

定义:领域特定语言(英语:domain-specific language、DSL)指的是专注于某个应用程序领域的计算机语言。又译作领域专用语言。 源自 Martin Fowler 大神的著作《领域特定语言》。

2.2 通用语言与DSL的关系

通用语言其实跟DSL有相通之处,都是着重表达某个领域的业务名词,术语。只是通用语言更偏向于业务分析建模。而DSL则偏向于使用计算机技术将通用语言进行落地,进行模块化,自动化,让计算机通过一定的规则实现通用语言所表达的业务代码生成。

2.3 参考文档

DSL的概念

前端DSL

百度百科

领域特定语言

3. 通用语言实例

下面列举一些领域的通用语言和术语,供大家参考:

3.1 电商领域

3.2 四色建模的通用语言

4. 小结

如果我们长期处于某个领域的话肯定会有一些术语,专用词,俗语来表达某个场景或者业务活动,或者人事物。这样的话我们需要通过这些通用语言来探索更深层次的业务语义。

通用语言需要做到:

  • 表意明确,不用过多解释就知道一个名词、一段话表达了什么样的业务语义且无歧义
  • 认知统一,使用通用语言的所有人都对该语言有一个统一的标准
  • 简单易学,学习成本不能太高,毕竟是为业务服务的

这种通用语言基于领域模型,领域模型其实是领域专家头脑中对该领域的一个整体认知,并不是一些图形化和文本化的东西,那些只是用来辅助理解的。

通过团队交流达成共识的能够简单清晰准确传递业务规则的语言(可以是文字、图片等)即可称为通用语言。

通用语言包含术语和用例场景,且能够直接反映在代码中。

基于通用语言,开发人员能够开发出可读性更好的代码,从而将业务需求准确转化为代码设计。达到DDD的目标代码即设计,设计即代码。通俗的讲,也就是开发人员写的代码领域专家也能看懂。

相关文章
真下饭!字节技术官DDD(领域驱动设计)手册,拆解业务代码首选
至少20年前,一些顶尖的软件设计人员就已经认识到领域建模和设计的重要性,但令人惊讶的是,这么长时间以来几乎没有人写出点儿什么,告诉大家应该做哪些工作或如何去做。尽管这些工作还没有被清楚地表述出来,但一种新的思潮已经形成,它像一股暗流一样在对象社区中涌动,我把这种思潮称为领域驱动设计(domain-driven design)。
|
存储 前端开发 测试技术
DDD - 六边形架构和CQRS架构
DDD - 六边形架构和CQRS架构
1008 0
|
设计模式 前端开发 关系型数据库
【DDD】全网最详细2万字讲解DDD,从理论到实战(代码示例) 3
【DDD】全网最详细2万字讲解DDD,从理论到实战(代码示例)
5207 2
|
缓存 前端开发 中间件
DDD 领域驱动设计落地实践系列:工程结构分层设计
前面几篇文章中,笔者给大家阐述了 DDD 领域驱动设计的三大过程,重点围绕如何通过战略设计与战术设计进行 DDD 落地实践进行了详细的讨论,但是还没有涉及到工程层面的落地。实际上所有的这些架构理论到最后都是为了使得我们代码结构更加清晰,从而开发出 bug 少、扩展性强、逻辑清楚的应用。因此本文就是为了解决 DDD 领域驱动落地实践最后一公里问题,将我们分析出来的领域模型通过与工程结构的映射实现真正的落地。
DDD 领域驱动设计落地实践系列:工程结构分层设计
|
微服务 测试技术 Java
阿里技术专家详解 DDD 系列- Domain Primitive
关于DDD的一系列文章,希望能继续在总结前人的基础上发扬光大DDD的思想,但是通过一套我认为合理的代码结构、框架和约束,来降低DDD的实践门槛,提升代码质量、可测试性、安全性、健壮性。
61895 17
阿里技术专家详解 DDD 系列- Domain Primitive
|
设计模式 缓存 自然语言处理
DDD领域驱动设计如何进行工程化落地
DDD领域驱动设计到底如何进行实际的工程化落地,为什么要进行领域分层?本文主要围绕DDD领域分层,设计了可落地的工程结构。
DDD领域驱动设计如何进行工程化落地
|
11月前
|
消息中间件 供应链 测试技术
图解 DDD,这一篇总结太全面了!
DDD领取驱动是非常热的架构设计,微服务也有大量涉及,本文详细解析领域驱动设计(DDD),涵盖DDD原理、实践步骤及核心概念等,帮助更好地管理复杂业务逻辑。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
图解 DDD,这一篇总结太全面了!
|
存储 消息中间件 JSON
DDD基础教程:一文带你读懂DDD分层架构
DDD基础教程:一文带你读懂DDD分层架构
|
缓存 架构师 中间件
成为工程师 - 如何做DDD领域驱动设计?
成为工程师 - 如何做DDD领域驱动设计?
|
领域建模 API 数据安全/隐私保护
DDD的函数式编程实现
【8月更文挑战第16天】
184 0
DDD的函数式编程实现