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

news2024/11/13 21:38:27

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

  • 前言介绍
    • 降低沟通成本
      • 问题:各自建立属于自己领域/层面的语言标准
      • 解决方案1:专业术语转换为接地气的话术
      • 解决方案2:用简单的案例和背景信息进行描述
    • 沟通语言的重要性
      • 沟通交流所出现的问题
  • 通用语言的诞生
    • 通用语言
      • 创建通用语言
        • 询问专家如何开始监控空中交通
        • 询问是否在飞行时可以随意选择任何空中线路
        • 询问是否在飞行时可以随意选择任何空中线路
        • 飞行高度以及方位的处理
        • 沟通一下飞行计划信息

前言介绍

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

降低沟通成本

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

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

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

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

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

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

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

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

沟通语言的重要性

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

沟通交流所出现的问题

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

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


通用语言的诞生

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

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

通用语言

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

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

创建通用语言

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

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

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

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

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

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

  • 开发人员:他们将这条路线视为一条空中的三维线路。该线路可以使用笛卡尔坐标系列出一系列三维点,从而为飞行员提供更直观的参考。

  • 专家的观点与开发人员不同。专家认为,飞行路线实际上是预期的和纬度信息将会被用来确定它们的位置。

飞行高度以及方位的处理

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

沟通一下飞行计划信息

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【无监督学习】1、MOCOv1 | 用于提升无监督学习效果的动量对比学习

文章目录 一、背景二、方法2.1 对比学习(字典查表)2.2 动量对比函数2.3 Pretext Task 三、效果3.1 数据集3.2 训练细节3.3 实验 论文:Momentum Contrast for Unsupervised Visual Representation Learning 代码:https://github.c…

【Java|多线程与高并发】wait和notify方法详解

文章目录 1.前言2.wait和notify的基本使用3. notifyAll方法4. wait和sleep方法的对比5. 总结 1.前言 在Java多线程环境中,线程之间是抢占式执行的,线程的调度是随机的.这就很难受了. 在很多情况下我们希望线程以我们想要的顺序来执行. 这就需要wait和notify这两个方法 2.wait和…

Java——《面试题——MySQL篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 目录 前文 1、数据库的三范式是什么? 2、MySQL数据库引擎有哪些 3、说说…

【五子棋实战】第2章 博弈树负值极大alpha-beta剪枝算法

【五子棋实战】第2章 博弈树极大极小值alpha-beta剪枝算法 博弈树 极大极小值搜索Minimax 负值极大法Negamax alpha-beta剪枝 博弈树负值极大alpha-beta剪枝算法代码实现 ## 初始化输入、确定输出 ## 开始回溯 ## 判赢 ## 评估-计算分数 总结 继续学习下一篇实战&…

注解和异常的详细笔记

注解的理解 注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。在 JavaSE 中&am…

OpenMMLab-AI实战营第二期——相关1. COCO数据集格式和pycocotools使用(目标检测方向)

文章目录 1. COCO数据集1.1 COCO数据集介绍1.2 COCO数据集格式1.2.1 常见目标检测数据格式1.2.2 COCO数据集文件结构及标注文件说明1.2.3 COCO的evaluation指标 1.3 其他 2. pycocotools2.1 pycocotools简介和安装2.2 基本使用 3. 图像的EXIF使用3.1 图像的EXIF3.1.1 基本介绍3…

车载以太网MACsec

车载以太网MACsec 1.概述 MACsec(Media Access Control Security)定义了基于 IEEE 802 局域网络的数据安全通信的方法。MACsec 可为用户提供安全的 MAC 层数据发送和接收服务,包括用户数据加密(Confidentiality)、数…

新浪股票接口获取历史数据

这两天做了一个调用新浪股票接口获取实时以及历史股票数据的应用,因为新浪没有公开关于其接口的官方文档,所以通过各种百度差了很多关于新浪股票接口的使用,不过大家基本都是转载或者直接复制,对于实时数据的获取讲的很详细&#…

Linux【系统学习】(shell篇)

第 1 章 Shell 概述 1)Linux 提供的 Shell 解析器有 Ubuntu 使用的是dash 2)bash 和 sh 的关系 3)Centos 默认的解析器是 bash 第 2 章 Shell 脚本入门 1)脚本格式 (结尾不是必须以 .sh 结尾,只是为了区…

《网络安全0-100》VPN 讲解

1、前言 VPN虽好可不要贪玩哦 2、VPN的概念和结构 VPN:虚拟专用网(virtual personal network)是利用internet等公共网络的基础设施,通过隧道技术,为用户提供的专用网络具有相同通信功能的安全数据通道。 ‘虚拟’是指用户无需建立各逻辑上的专用物理线…

​AVS3支持下的8K内容生产和传输应用实践

AVS标准经过20年发展,到AVS3这一代实现了国产标准从跟跑到领跑的突破。博雅睿视团队深度参与AVS3标准制定,开发的8K AVS3实时、离线编解码设备有力支持了我国8K超高清视频产业的落地和推广。 本次分享将会分为三个部分,第一部分重点介绍AVS标…

MusicGen配乐工具开源,教你怎么给抖音短视频配乐,助你涨粉1000!

大家好,我是千与千寻,好久不见了,很多粉丝私信我说,千寻哥这是去哪了?难道被野外捕捉了。 哈哈哈,当然不是了,千寻依然在学习ChatGPT的道路上和大家一起学习,一起搞钱! 但…

TC8:TCP_MSS_OPTIONS_05-09

TCP_MSS_OPTIONS_05: Illegal option length for MSS in a SYN-ACK segment 目的 TCP能够处理SYN+ACK报文段中MSS选项的长度非法,而不会崩溃 可以正常地响应,就是不崩溃,这里指的应该是DUT发送ACK 测试步骤 Tester:让DUT侧的应用程序发起主动open调用DUT:发送SYNTester:…

C++类和对象--构造函数和析构函数

0.前言 在我们写某些需要动态开辟内存空间的函数时候,会经常忘记初始化、销毁,而且有时候程序返回的情况很多,那么销毁函数写起来就会很繁琐,那么有没有什么办法解决这个问题呢?答案是:当然有!在…

Java类 继承

Java是一种面向对象的编程语言,类是Java中最基本的编程单元。一个类可以包含变量、方法和构造函数等。类的定义需要使用关键字class,例如: public class Person { private String name; private int age; public Person(St…

文心一言 VS 讯飞星火 VS chatgpt (44)-- 算法导论6.1 1题

一、在高度为h的堆中,元素个数最多和最少分别是多少? 文心一言: 在高度为 h 的二叉搜索树(BST)中,元素个数最多和最少的情况分别如下: 1.最多情况:当每个节点都包含两个子节点时&#xff0c…

CSS3-盒子模型-边距问题

1 清除默认内外边距 场景:浏览器会默认给部分标签设置默认的margin和padding,但一般在项目开始前需要先清除这些标签默认的margin和padding,后续自己设置 比如:body标签默认有margin:8px、p标签默…

一句提示词生成整个代码库——Gpt Engineer神级项目开源(附演示视频)

近日,一个名为Gpt Engineer神级项目开源,并迅速火爆全网。 短短几天内,该项目已经得到了25K的星星。 使用GPT-engineer进行人工智能软件开发,可以改变软件开发的未来。 在软件开发领域,一场巨大的革命正在开始。这一转…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月 22 日论文合集)

文章目录 一、检测相关(9篇)1.1 Wildfire Detection Via Transfer Learning: A Survey1.2 Polygon Detection for Room Layout Estimation using Heterogeneous Graphs and Wireframes1.3 Exploiting Multimodal Synthetic Data for Egocentric Human-Object Interaction Detec…

前端中的相关概念

谁道人生无再少, 门前流水尚能西。 桃花落尽胭脂透, 庭院无声五更鸡。 —— 杜甫《端午节》 HTML中class属性 HTML中class属性是一种用于为元素定义样式和标识的属性,以下是class属性的几种常见用法实例,包括标识元素、定义样…