【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)

简介: 【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)

前言介绍

从前面的内容可以了解到领域建模需要软件专家和领域专家的合作,但由于基础交流的障碍,这种合作往往存在困难。软件专家会主要考虑类、方法、算法、模式等程序工件,他们会按照继承、多态、面向对象的编程等方式进行交流。然而,领域专家通常对这些概念不甚了解,他们只了解自己专业领域中的技能和知识。因此,在领域建模过程中,沟通交流是非常重要的,软件专家应该尽量减少使用专业术语、引入合适的例子帮助解释,而领域专家也应该尽可能地提供清晰的业务需求描述。只有通过双方的努力,才能够最终得到一个符合实际业务需求的模型。

降低沟通成本

在空中交通监控样例中,领域专家知道飞机、路线、海拔、经纬度等概念,并且能够判断飞机是否偏离了正常路线以及飞机的发射情况。然而,他们通常会用自己领域特有的术语进行讨论,使得对于一些非专业人士来说难以直接理解。因此,在与非专业人士沟通时,他们需要尽可能少地使用专业术语,或者使用通俗易懂的例子以帮助外行人理解。这样才能够达到更好的沟通交流效果。

问题:各自建立属于自己领域/层面的语言标准

领域专家和技术团队成员在交流中使用各自的行话和语言,这可能会导致沟通上的困难和误解。

解决方案1:专业术语转换为接地气的话术

为了在建立模型时克服交流方式不同的问题,需要进行频繁的沟通来交换想法,以便更好地理解模型以及其中涉及到的元素、连接方式、相关性等方面。

在这种交流中,需要尽可能地减少使用专业术语,并且使用通俗易懂的例子来帮助其他人理解模型中的各个要素。这种交流对于项目的成功非常关键,因为如果有人没有理解到某件事情,或者错误地理解成了其他事情,那么项目就有可能失败。因此,频繁的交流、耐心的解释以及清晰的表达都是非常重要的。

解决方案2:用简单的案例和背景信息进行描述

建议在交流时尽量使用通俗易懂的语言,尤其是对于不熟悉该领域的人来说。这可以通过提供更多的背景信息和例子来实现。另外,建议对于术语和专业领域的特定语言,在介绍时提供相应的注释或解释,使得其他人能够更好地理解。最后,也建议在设计讨论中加入一些可视化辅助工具,例如流程图和图表等,这些工具可以更加直观地展示设计和实现过程,有助于更加清晰地交流。

沟通语言的重要性

虽然代码是软件项目中最重要的产物之一,但实际上在日常讨论中使用的术语与实际代码中使用的术语往往不一样。即使是同一个人在交谈和书写时也需要使用不同的语言来表达自己的意思。为了深入了解领域,通常需要产生一种临时形式,但这种形式通常不会出现在代码或书面内容中。

沟通交流所出现的问题

在交流中,需要进行翻译才能让其他人理解相关概念。虽然开发人员可能尽力使用常人易懂的语言来解释设计模式,但并不一定每次都能成功。同时,领域专家可能会提出新的专有名词以表达其观念。然而,在这种痛苦的交流过程中,这种翻译工作并不能有效帮助知识的建构过程。

在模型讨论和定义中,我们需要使用一种共同的语言来交流。但是,这种语言应该是什么呢?是开发人员的语言,还是领域专家所使用的语言,还是介于两者之间的语言


通用语言的诞生

领域驱动设计的核心原则之一是使用基于模型的语言。模型作为软件满足领域共性的重要部分,非常适合作为构建通用语言的基础

使用模型作为语言的中心框架是领域驱动设计的一个重要原则。这个原则要求团队在所有的交流中使用相同的语言,包括代码和共享知识时使用的言语、文字和图形。这种语言被称为“通用语言(Ubiquitous Language)”,这是因为它在所有交流形式中都看上去一致的缘故。

通用语言

通用语言是建立设计团队良好工作前提的关键因素。在大规模项目中,设计可能需要数周乃至数月的时间才能达成目标。此过程中,团队成员可能会发现初始概念存在不正确或不适合的情况,或需要考虑并纳入总体设计的新设计元素。没有通用语言,这一切就不可能实现。

通过反映其他可选模型的表述方式,可以消除难点,并重构代码、重命名类、方法和模型以适应新的模型。使用普通词汇解决交谈中术语混乱的问题。构建一个这样的语言可以得到清晰的结果,模型与语言相互关联。对语言的变更将转化为对模型的变更。 领域专家反对使用笨拙或不适当的字眼或结构来传达对领域的理解。如果领域专家无法理解模型或语言中的某些内容,那么这就意味着存在某种错误。另一方面,开发人员应注意设计中存在二义性或不一致的内容。

创建通用语言

我们如何开始构建一种语言?以假想的软件开发人员和领域专家的关于空中交通监控项目的对话为例。

询问专家如何开始监控空中交通

  • 开发人员:询问专家如何开始监控空中交通。
  • 专家:建议从最基础的角度出发。所有的交通都是由飞机组成,每架飞机从一个出发点起飞,最后在一个目的地着陆。

询问是否在飞行时可以随意选择任何空中线路

  • 开发人员:认为飞机在飞行时可以随意选择任何空中线路,只要最终到达目的地。
  • 专家:解答称并不如此。驾驶员会收到规定的飞行路线,并需要尽可能地遵循这条路线。

询问是否在飞行时可以随意选择任何空中线路

  • 开发人员:他们将这条路线视为一条空中的三维线路。该线路可以使用笛卡尔坐标系列出一系列三维点,从而为飞行员提供更直观的参考。
  • 专家的观点与开发人员不同。专家认为,飞行路线实际上是预期的和纬度信息将会被用来确定它们的位置。

飞行高度以及方位的处理

开发人员称这些点为方位,并用一系列2D的点来描述飞行路线。出发点和终点也是方位,到达终点就像到达其他方位一样。然而,专家表示飞机在飞行计划中有规定的海拔高度,因此它不能按照自己的意愿选择高度。

沟通一下飞行计划信息

开发人员问专家:“飞行计划是什么意思?” 专家回答:“在起飞前,驾驶员会收到一份详细的飞行计划,其中包括有关本次飞行的所有信息,如飞行路线、巡航高度、巡航速度、飞机类型以及机组成员的信息等。”



我们可以通过将模型和代码之间、语言和代码之间进行映射来提高代码可读性,并完美实现模型。这种方式可以让整个项目受益。如果代码没有进行适当的设计,在模型变大或代码发生变化时,可能会导致意外结果。

相关文章
|
缓存 前端开发 中间件
DDD 领域驱动设计落地实践系列:工程结构分层设计
前面几篇文章中,笔者给大家阐述了 DDD 领域驱动设计的三大过程,重点围绕如何通过战略设计与战术设计进行 DDD 落地实践进行了详细的讨论,但是还没有涉及到工程层面的落地。实际上所有的这些架构理论到最后都是为了使得我们代码结构更加清晰,从而开发出 bug 少、扩展性强、逻辑清楚的应用。因此本文就是为了解决 DDD 领域驱动落地实践最后一公里问题,将我们分析出来的领域模型通过与工程结构的映射实现真正的落地。
DDD 领域驱动设计落地实践系列:工程结构分层设计
|
缓存 算法 安全
互联网并发与安全系列教程(02) - 服务限流
互联网并发与安全系列教程(02) - 服务限流
328 0
|
7月前
|
人工智能 JSON Java
AI时代,我们为何重写规则引擎?—— QLExpress4 重构之路
AI时代下,规则引擎的需求反而更旺盛。QLExpress4 通过全面重构,在性能、可观测性和AI友好性上大幅提升。
2079 15
AI时代,我们为何重写规则引擎?—— QLExpress4 重构之路
|
10月前
|
人工智能 前端开发 调度
基于大模型的领域场景开发:从单智能体到多智能体的React框架设计与实现
本文介绍了基于大模型的领域场景开发演进过程,从提示词工程、RAG到流程编排,再到React模式的智能体架构升级。团队通过层级指挥模式实现单智能体自主规划与工具调用,并探索多智能体协作框架,提升复杂任务处理效率与灵活性。
1596 19
基于大模型的领域场景开发:从单智能体到多智能体的React框架设计与实现
|
10月前
|
存储 设计模式 NoSQL
ddd领域驱动设计
领域驱动设计(DDD)是一种应对复杂软件系统的思维革命与系统方法。它通过“通用语言”统一团队认知,运用“限界上下文”划分业务边界,结合“聚合”“领域事件”等战术模式,精准构建业务模型。DDD不仅提升软件对业务的映射能力,更为微服务架构提供科学的边界划分依据,是打造高内聚、低耦合系统的核心方法论。
|
微服务 设计模式 测试技术
深入理解 DDD(领域驱动设计)思想
领域驱动设计(DDD)是一种以业务为核心的软件开发方法,通过限界上下文、聚合、实体、值对象等模型,分离业务与技术复杂性,提升系统可维护性与扩展性,尤其适用于复杂业务系统的架构设计。
2111 7
|
运维 Kubernetes 负载均衡
Kubernetes有哪些优势
【10月更文挑战第18天】Kubernetes有哪些优势
539 1
|
Java
Java中的CompletableFuture详解
`CompletableFuture`提供了一种简洁而强大的方式来处理Java中的异步编程。通过它,我们可以轻松地创建和组合异步任务,并处理任务中的异常。掌握 `CompletableFuture`的使用,将显著提升Java并发编程的效率和代码可读性。
673 16
|
负载均衡 监控 Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
Dubbo——初识RPC、Dubbo框架、使用直连方式实现Dubbo
|
存储 人工智能 自然语言处理
AI时代新宠,向量数据库
这篇文章介绍了向量数据库在生成式人工智能应用和大语言模型发展中的重要性,并介绍了几种主流的向量数据库产品,包括Milvus、Pipecone、Chroma、Weaviate、pgvector等。这篇文章详细介绍了向量数据库的概念和主流产品,对于了解向量数据库在人工智能领域的应用具有很好的参考价值。转载来自知乎:https://zhuanlan.zhihu.com/p/664747312,很好的科普文,自己收藏用。

热门文章

最新文章