学习 DDD - 通用语言的模式
大家好,我是霸戈,这周学习了一些关于领域驱动设计的知识 ,对比较深刻的地方做了不少笔记,分享给大家。

在日常需求讨论的时候,经常会碰到一个需求会议开了一个多小时还没有达成共识。作为业务方(领域专家)明明表达的很清楚,但是开发人员却始终无法理解透彻,很明显的原因就是由于双方的知识体系不一致 ,没有形成一种双方互相都能理解的语言。
语言的鸿沟
虽然领域专家对软件开的技术所知有限,但他们熟悉使用自己的领域术语——可能还具有各种不同的风格。另一方面,开发人员可能会用一些描述性的,功能性的术语来理解和讨论系统,而这些术语并不具备领域专家的语言所要传达的意思。
开发人员可能会创建一些用于支持设计的抽象,但领域专家无法理解这些抽象。负责处理不同部分的开发人员可能会开发出各自不同的设计概念以及描述领域的方式。
由于语言上存在鸿沟,领域专家们只能模糊地描述他们想要的东西。开发人员虽然努力的理解一个自己不熟悉的领域,但也只能形成模糊的认识。
虽然少数团队成员会高法掌握这两种语言,但他们会变成信息流的瓶颈,并且他们的翻译也不准确。
相互翻译使模型变得混淆
在一个没有公共语言的项目上,开发人员不得不为领域专家做翻译。而领域专家要充当开发人员与其他领域专家之间的翻译。
这些翻译使模型概念变得混淆,而这会导致有害的代码重构。这种间接的沟通掩盖了分裂的形成——不同的团队成员使用不同的术语而尚不自知。
由于软件各个部分不能够浑然一体,因此这就导致无法开发出可靠的软件。翻译工作导致各类促进深入理解的知识和想法无法结合在一起。
不同语言产生的后果
如果语言支离破碎,项目必将遭遇严重的问题。领域专家使用他们自己的术语,而技术团队使用的语言则经过调整,以便从设计角度讨论领域。
日常讨论所使用的术语与代码中使用的术语不一致。甚至同一个人在讲话和写东西时使用的语言也不一致,这导致的后果是,对领域的深刻表述常常稍纵即逝,根本无法记录到代码或者文档 中。
翻译使得沟通不畅,并削弱了知识消化。 然而任何一方的语言都不能成为公共语言,因为它们无法满足所有的需求。
让领域模型成为公共语言
所有的程序的开销,连带着误解的风险,成本实在太高了。项目需要一种公共语言,这种语言要比所有的语言的最小公分母健壮得多。通过团队的一致努力,领域模型可以成为这种公共语言的核心,同时将团队沟通与软件实现紧密联系在一起。该语言将存在于团队工作中的方方面面。
最小公分母: 就是两个分母的最小公倍数,比如说2和3的最小公倍数是6,那么最小公分母就是6。
通用语言的词汇
通用语言的词汇包括类和主要的操作名称。语言中的术语,有些是用来讨论模型中已经明确的规则,还有些则来自施加于模型的的高级组织原则如:限界上下文、上下文映射图。
基于模型的语言
开发人员应该使用基于模型的语言来描述系统中的工件、任务和功能。这个模型应该为开发人员和领域专家提供一种用于相互交流的语言,而且领域专家还应该使用这种语言来讨论需求、开发计划和特性。语言使用得越普遍,理解进行得就越顺畅。
将模型作为语言的支柱。确保团队在内部的所有交流中以及代码中坚持使用这种语言,在画图、写东西、特别是讲话时也要使用这种语言。
领域专家应该抵制不合适或无法充分表达领域理解的术语或结构,开发人员应该密切关注那些将会妨碍设计的有歧义和不一致的地方 。
总结
在DDD的世界里,不管是作为领域专业还是开发人员,大家在讨论业务的时候都应该使用双方都能理解的语言。尽管在初期这种语言是晦涩难懂的,但随着项目的发展会慢慢渐入佳境。
空有通用语言其实不够,使用口头交流的方式,容易造成知识的丢失,也不利于项目未来的发展。应当建立模型,所有的讨论都是基于模型的,任何的的变更都要反映到模型上面。
推荐
- 分享一套家庭理财系统(附源码)
- 推荐一套开源通用后台管理系统(附源码)
- 推荐一个酷炫的监控系统
- 从朋友那里搞了 20 个实战项目,速领!
- 推荐一个完善的停车管理系统,物联网项目springboot,附源码
- 推荐一个互联网企业级别的开源支付系统
- 一款神仙接私活儿软件,吊到不行!
- 推荐 10 款超实用的企业级开源应用!
- 开放平台 SDK 设计实践!
- “淘宝” 开放平台接口设计思路
- Spring中经典的9种设计模式
学习 DDD - 通用语言的模式的更多相关文章
- 1 DDD理论学习1 通用语言
通用语言就是将事情描述清楚的语言 达到DDD的目标代码即设计,设计即代码.通俗的讲,也就是开发人员写的代码领域专家也能看懂. ddd模式跟传统模式的一个区别在于 传统先创建数据库表 再根据表创建类.而 ...
- DDD理论学习系列(1)-- 通用语言
1.引言 在开始之前,我想我们有必要先了解以下DDD的主要参与者.因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是? DDD的主要参与者:领域专家+开发人员 领域专家:精通业务的任 ...
- DDD中限界上下文与通用语言的作用
什么是通用语言 通用语言, 最主要的目的就是减少交流中信息丢失, 在实际开发中, 可能关联很多人, 例如有业务层面的业务细节制定者.领域专家.产品经理.项目经理 .架构师.开发经理.测试经理等等, 即 ...
- 学习 DDD 之消化知识!
接触到DDD到现在已经有8个月份了,目前所维护的项目也是基于DDD的思想开发的,从一开始的无从下手,到现在游刃有余,学到不少东西,但是都是一些关键字和零散的知识,同时我也感受到了是因为我对项目越来越熟 ...
- 值得学习的C语言开源项目
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...
- 【C/C++开发】值得学习的C语言开源项目
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在Linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- 基于STM32的学习型通用红外遥控设备的设计实现(三)
CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9 http://blo ...
- c语言学习书籍推荐《C语言学习路线图•C语言必须知道的300个问题》下载
下载地址:点我 <C语言学习路线图•C语言必须知道的300个问题>以基础知识为框架,介绍了c语言各部分知识所对应的常见开发疑难问题,并作了透彻地解析.<C语言学习路线图•C语言必须知 ...
随机推荐
- 2021.7.29考试总结[NOIP模拟27]
T1 牛半仙的妹子图 做法挺多的,可以最小生成树或者最短路,复杂度O(cq),c是颜色数. 我考场上想到了原来做过的一道题影子,就用了并查集,把边权排序后一个个插入,记录权值的前缀和,复杂度mlogm ...
- Spark面试题(二)
首发于我的个人博客:Spark面试题(二) 1.Spark有哪两种算子? Transformation(转化)算子和Action(执行)算子. 2.Spark有哪些聚合类的算子,我们应该尽量避免什么类 ...
- Python课程笔记(三)
1.python定义类.创建对象 class Myclass: # 定义Myclass类 def sum(self,x,y): self.x = x self.y = y return self.x+ ...
- 确定两串乱序同构 牛客网 程序员面试金典 C++ Python
确定两串乱序同构 牛客网 程序员面试金典 C++ Python 题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串中 ...
- centos7 永久修改hostname
1.修改 /etc/sysconfig/network ,重启后还是原来的主机名 2.百度有说明是/etc/rc.d/rc.sysinit下的脚本还原了还来主机名,问题是的我主机上没有这个脚本 3.执 ...
- 【Python+postman接口自动化测试】(6)Chrome开发者工具
Chrome开发者工具 Elements: HTML元素面板,用于定位查看元素源代码 Console: js控制台面板,js命令行,查看前端日志 Sources: 资源面板,用于断点调试js Netw ...
- jvm优化理解
jvm架构理解 jvm程序执行流程 编译器和解释器协调工作流程 在部分商用虚拟机中(如HotSpot),java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或者某段代码执行的特别频繁后就会 ...
- Swift-Framework Error(一)桥接文件
摘要 Xcode 编译工程代码时,出现编译错误时除了红色图标外,还会附送几句英文文本. 常规操作拷贝英文文本,放到搜索框中找答案,但是读懂这几句话能事半功倍. 项目中如果有 OC 和 Swift 两种 ...
- c++学习笔记7(面向对象的程序设计)
面向对象的程序=类+类+....+类 设计程序的过程,就是设计类的过程 实例 对象的内存分配 对象间的运算 使用类的成员变量和成员函数
- php 变量和数据类型
$ 定义变量: 变量来源数学是计算机语言中能存储计算结果或能表示值抽象概念.变量可以通过变量名访问.在指令式语言中,变量通常是可变的. php 中不需要任何关键字定义变量(赋值,跟Java不同,Jav ...