Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >学习 DDD - 通用语言的模式

学习 DDD - 通用语言的模式

作者头像
dys
发布于 2021-12-10 03:18:08
发布于 2021-12-10 03:18:08
3090
举报
文章被收录于专栏:性能与架构性能与架构

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

在日常需求讨论的时候,经常会碰到一个需求会议开了一个多小时还没有达成共识。作为业务方(领域专家)明明表达的很清楚,但是开发人员却始终无法理解透彻,很明显的原因就是由于双方的知识体系不一致 ,没有形成一种双方互相都能理解的语言。

语言的鸿沟

虽然领域专家对软件开的技术所知有限,但他们熟悉使用自己的领域术语——可能还具有各种不同的风格。另一方面,开发人员可能会用一些描述性的,功能性的术语来理解和讨论系统,而这些术语并不具备领域专家的语言所要传达的意思。

开发人员可能会创建一些用于支持设计的抽象,但领域专家无法理解这些抽象。负责处理不同部分的开发人员可能会开发出各自不同的设计概念以及描述领域的方式。

由于语言上存在鸿沟,领域专家们只能模糊地描述他们想要的东西。开发人员虽然努力的理解一个自己不熟悉的领域,但也只能形成模糊的认识。

虽然少数团队成员会高法掌握这两种语言,但他们会变成信息流的瓶颈,并且他们的翻译也不准确。

相互翻译使模型变得混淆

在一个没有公共语言的项目上,开发人员不得不为领域专家做翻译。而领域专家要充当开发人员与其他领域专家之间的翻译。

这些翻译使模型概念变得混淆,而这会导致有害的代码重构。这种间接的沟通掩盖了分裂的形成——不同的团队成员使用不同的术语而尚不自知。

由于软件各个部分不能够浑然一体,因此这就导致无法开发出可靠的软件。翻译工作导致各类促进深入理解的知识和想法无法结合在一起。

不同语言产生的后果

如果语言支离破碎,项目必将遭遇严重的问题。领域专家使用他们自己的术语,而技术团队使用的语言则经过调整,以便从设计角度讨论领域。

日常讨论所使用的术语与代码中使用的术语不一致。甚至同一个人在讲话和写东西时使用的语言也不一致,这导致的后果是,对领域的深刻表述常常稍纵即逝,根本无法记录到代码或者文档 中。

翻译使得沟通不畅,并削弱了知识消化。 然而任何一方的语言都不能成为公共语言,因为它们无法满足所有的需求。

让领域模型成为公共语言

所有的程序的开销,连带着误解的风险,成本实在太高了。项目需要一种公共语言,这种语言要比所有的语言的最小公分母健壮得多。通过团队的一致努力,**领域模型可以成为这种公共语言的核心,同时将团队沟通与软件实现紧密联系在一起。**该语言将存在于团队工作中的方方面面。

最小公分母:就是两个分母的最小公倍数,比如说2和3的最小公倍数是6,那么最小公分母就是6。

通用语言的词汇

通用语言的词汇包括类和主要的操作名称。语言中的术语,有些是用来讨论模型中已经明确的规则,还有些则来自施加于模型的的高级组织原则如:限界上下文、上下文映射图。

基于模型的语言

开发人员应该使用基于模型的语言来描述系统中的工件、任务和功能。这个模型应该为开发人员和领域专家提供一种用于相互交流的语言,而且领域专家还应该使用这种语言来讨论需求、开发计划和特性。语言使用得越普遍,理解进行得就越顺畅。

将模型作为语言的支柱。确保团队在内部的所有交流中以及代码中坚持使用这种语言,在画图、写东西、特别是讲话时也要使用这种语言。

领域专家应该抵制不合适或无法充分表达领域理解的术语或结构,开发人员应该密切关注那些将会妨碍设计的有歧义和不一致的地方 。

总结

在DDD的世界里,不管是作为领域专业还是开发人员,大家在讨论业务的时候都应该使用双方都能理解的语言。尽管在初期这种语言是晦涩难懂的,但随着项目的发展会慢慢渐入佳境。

空有通用语言其实不够,使用口头交流的方式,容易造成知识的丢失,也不利于项目未来的发展。应当建立模型,所有的讨论都是基于模型的,任何的的变更都要反映到模型上面。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
领域驱动系列三
领域模型是软件项目中的核心,模型是团队经过长时间的归纳总结形成的一个与项目有关的概念集合,他用术语和关系表达了领域的深层含义,这种关系和语义提供了模型语言的语义,模型语言是为领域独家定制的.十分的精确,并且他将开发过程和模型绑定到一起,并使代码和模型紧密的绑定.
郑小超.
2019/01/03
4070
DDD理论学习系列(1)-- 通用语言
1.引言 在开始之前,我想我们有必要先了解以下DDD的主要参与者。因为毕竟语言是人说的吗,就像我们面向对象编程一样,那通用语言面向的是? DDD的主要参与者:领域专家+开发人员 领域专家:精通业务的任何人。 开发人员:开发+测试。 领域专家擅长某个领域的知识,专注于交付的业务价值。 开发人员则注重于技术实现。 开发人员总是想着类、接口、方法、设计模式、架构等。以面向对象的编程思想进行思考,思考如何进行抽象、封装、继承、多态等。而领域专家对软件中的框架、持久化、数据库等没有概念,而这也就导致了他们
圣杰
2018/01/11
1.5K0
领域驱动设计学习之路—DDD的原则与实践
本文是我学习Scott Millett & Nick Tune编著的《领域驱动设计模式、原理与实践》一书的学习笔记,一共会分为4个部分如下,此文为第1部分:
Edison Zhou
2019/05/10
2.1K0
领域驱动设计学习之路—DDD的原则与实践
字节一面挂了,面试官问DDD,我却不知道
在介绍DDD(Domain-Driven Design:领域驱动设计)之前,我们先回顾一下,现阶段的产品迭代中常常出现的一些问题,以及这些问题会导致什么。通过对问题的总结和分析,再回头看一看,DDD能帮我们解决什么?
爪哇缪斯
2023/05/10
4840
字节一面挂了,面试官问DDD,我却不知道
谈一谈 DDD
最近 10 年的互联网发展,从电子商务到移动互联,再到“互联网+”与传统行业的互联网转型,是一个非常痛苦的转型过程。在这个过程中,一方面会给我们带来诸多的挑战,另一方面又会给我们带来无尽的机会,它会带来更多的新兴市场、新兴产业与全新业务,给我们带来全新的发展机遇。然而,在面对全新业务、全新增长点的时候,我们能不能把握住这样的机遇呢?
冬夜先生
2021/12/06
5110
[译文]Domain Driven Design Reference(二)—— 让模型起作用
  很多项目做建模工作最终没有获得太多的实际好处。DDD模式从项目中提炼成功的实践使得建模带来了巨大的好处。总的来说,他们提出了一个与先从细节再到高层次的视角【1,在DDD之前我们大部分都习惯于先进行数据表的设计】完全不同的建模和软件开发的方式。严格的建模惯例必须平衡好与非技术人员【2,一般这里指领域专家】合作进行的模型探索。战术和战略必须结合才能成功,DDD同时涉及战术和战略的设计。
Zachary_ZF
2018/09/10
3480
软件方法(下)第8章分析之分析类图—知识篇Part05(202205更新)领域专家和通用语言
一个领域之所以能作为“领域”为人认知,必定会在发展过程中沉淀出一套日益完善和精确的术语体系。每个术语有其独特的、其他术语不能替代的含义。
用户6288414
2022/05/27
4020
软件方法(下)第8章分析之分析类图—知识篇Part05(202205更新)领域专家和通用语言
领域驱动设计
关于领域驱动设计 这篇文章参考了Eric Evans《领域驱动设计》一书以及Jimmy Nilsson《以C# .NET为例运用领域驱动设计和模式》,二者详细描述了领域驱动设计的核心概念、技术和模式。在某些情况下,直接使用这些书的措辞是有意义的,并且我认为Eric Evans和Jimmy Nilsson也允许我们这么做。 尽管将方法本身呈现出来是很有用的,但是仅仅对方法进行描述,DDD的许多微妙之处就会消失。这些方法应该是你的工具,而不是你束缚你的规则。它们是为设计而生的语言,在团队内沟通创意和模型十分有益
程序猿DD
2018/03/21
1K0
领域驱动设计
DDD开篇总结
对于DDD的启蒙,不管是国内还是国外思维逻辑都是一样的。或者说如果你想写本关于DDD的书,大纲似乎是一样的
码农戏码
2021/03/23
5230
限界上下文是什么鬼?DDD 最抽象的概念详解
- 什么是通用语言 - 通用语言, 最主要的目的就是减少交流中信息丢失, 在实际开发中, 可能关联很多人, 例如有业务层面的业务细节制定者、领域专家、产品经理、项目经理 、架构师、开发
玄姐谈AGI
2021/07/29
6.3K0
DDD领域驱动实战 - 限界上下文(bounded context)
限界上下文定义领域边界,以确保每个上下文含义在它特定的边界内都具有唯一的含义,领域模型则存在于这个边界之内。
JavaEdge
2020/10/02
4.3K0
DDD领域驱动实战 - 限界上下文(bounded context)
[译文]Domain Driven Design Reference(五)—— 为战略设计的上下文映射
  两个组之间的关系是“上游”小组的行为影响“下游”小组的项目成功。但下游的行为并不会显著影响上游项目。(例如,如果两个城市沿着同一条河流,上游城市的污染主要影响下游城市。)
Zachary_ZF
2018/09/10
3580
真下饭!字节技术官DDD(领域驱动设计)手册,拆解业务代码首选
至少20年前,一些顶尖的软件设计人员就已经认识到领域建模和设计的重要性,但令人惊讶的是,这么长时间以来几乎没有人写出点儿什么,告诉大家应该做哪些工作或如何去做。尽管这些工作还没有被清楚地表述出来,但一种新的思潮已经形成,它像一股暗流一样在对象社区中涌动,我把这种思潮称为领域驱动设计(domain-driven design)。
愿天堂没有BUG
2022/10/28
5510
真下饭!字节技术官DDD(领域驱动设计)手册,拆解业务代码首选
领域驱动设计(DDD)部分核心概念
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/30
4110
领域驱动模型(DDD)
2004年Eric Evans 发表《领域驱动设计——软件核心复杂性应对之道》(Domain-Driven Design –Tackling Complexity in the Heart of Software),简称Evans DDD,领域驱动设计思想进入软件开发者的视野。领域驱动设计分为两个阶段:
高广超
2018/12/12
3.9K0
走近DDD
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
4070
重读领域驱动设计——如何说好一门通用语言
在 DDD 中,通用语言是以限界上下文为边界的。如果一个产品或者项目有多个限界上下文,我们就需要为每个限界上下文定义通用语言。
ThoughtWorks
2019/05/05
6740
重读领域驱动设计——如何说好一门通用语言
混合开发:TDD、DDD和BDD交集的值
测试驱动开发(TDD)是一种开发软件的过程,其中在编写代码之前先编写测试。一旦完成,开发人员将努力编写足够的代码以通过测试,然后开始重构。
程序猿玄微子
2020/12/05
2K0
混合开发:TDD、DDD和BDD交集的值
DDD“通用语言”背后的倒退-《软件方法》节选
DDD(领域驱动设计)话语中有“通用语言(Ubiquitous Language)”的用语,这是一个伪创新。
用户6288414
2022/10/31
5020
DDD“通用语言”背后的倒退-《软件方法》节选
领域驱动设计模式的收益与挑战
《软件学报》在2021年第32卷第9期刊登了一篇论文:《领域驱动设计模式的收益与挑战:系统综述》[1]。这篇论文是学术界在这一领域开山之作。
码农戏码
2021/11/18
1.3K0
领域驱动设计模式的收益与挑战
相关推荐
领域驱动系列三
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档