首页 > 其他分享 >领域驱动设计-软件核心复杂性应对之道:第二章

领域驱动设计-软件核心复杂性应对之道:第二章

时间:2023-04-16 09:33:46浏览次数:31  
标签:语言 模型 复杂性 领域专家 之道 文档 使用 第二章 代码

第二章 语言的交流和使用

2.1 模式

​ 由于语言上存在鸿沟,领域专家们只能模糊地描述他们想要的东西。开发人员虽然努力去理解一个自己不熟悉的领域,但也只能形成模糊的认识。有少数的团队成员会学着同时说这两种语言,但由于这样的人太少了,信息流会遭遇瓶颈问题,而且他们的翻译也不准确。

​ 如果语言支离破碎,项目必将遭遇严重问题。领域专家使用他们自己的行话,而技术团队成员则使用自己的语言来从设计角度讨论领域。

​ 日常讨论所使用的术语与代码(软件项目的最重要产品)中使用的术语不一致。甚至同一个人在讲话和写东西时使用的语言也不一致,这导致的后果是,即使人们对领域有了一些深刻的描述,也转眼就忘记了,而无法记录到代码或文档中。

​ 翻译使得沟通不畅,并导致知识消化变得困难。

​ 然后任何一种行话都不能成为公共语言,因为它们无法满足所有的需求。

​ 所有开发人员都应该使用基于模型的语言来描述系统中的工作、任务和功能。语言的使用越普遍,理解就越容易。

​ 团队一致使用通用语言可以暴露出模型中存在的缺点,这样团队就可以尝试并找到不恰当术语或组合词的替代词。当有些概念无法用现有语言中的词汇表达时,新的词语将被引入到讨论中。这些语言上的更改也会在领域模型中引起相应的更改,并促使团队更新类图并重命名代码中的类和方法,甚至在术语的意义改变时会导致行为也发生改变。

​ 通过在实现的上下文中使用这种语言,开发人员能够指出不准确和矛盾的词,并和领域专家一起找到有效的替代词。

​ 当然,领域专家所讲的话会超出通用语言的范围,他们会解释并给出一个更广泛的上下文。但在模型的范围内,他们应该使用language,并在发现那些拗口、不完整或错误的地方之后要特别留意。通过一致地使用基于模型的语言并不断完善它,直到它达到非常流程的程度,我们就可以得到一个完整的、易于理解的模型,它完全由简单元素组成,这些简单元素组合到一起表达了复杂的思想。

因此:

​ 将模型作为语言的中心。确保团队在所有交流活动和代码中坚持使用这种语言。在画图,写东西特别是讲话时也要使用这种语言。

​ 通过尝试不同的表示方法(它们反映了不同模型)来消除难点。然后重构代码,并对类、方法和模块重新命名,以便与新模型相一致。解决交谈中的术语混淆问题,就像我们对普通词汇形成一个公认的理解一样。

​ 要认识到通用语言中的更改就是对模型的更改。

​ 领域专家应该避免使用拗口或无法表达领域理解的术语或结构,开发人员应该密切监视那些将会妨碍设计的有歧义和不一致的地方。

在每个对话场景中,注意观察讲话者有多少内容是谈论软件的业务功能,有多少内容是从技术上谈论软件的工作 机理的。用户和开发人员用的是同一种语言吗?它是否是一种可以用来讨论应用程序功能的丰富语言?

2.2 大声地建模

当我们在讨论中使用领域模型的通用语言时,特别是在开发人员和领域专家一起仔细研究场景和需求的讨论中,通用语言的使用会越来越流利,而且我们还可以互相指定一些细微的差别。我们很自然地一起使用这种语言,而图和文档永远也无法实现这种效果。

讨论系统时要结合模型。使用模型的元素以及模型中各元素之间的交互来大声描述场景,并且按照模型允许的方式将各种概念结合到一起。找到更简单的表达方式来讲出你要讲的话,然后将这些新的思想应用到图和代码中。

2.3 一个团队,一种语言

​ 当领域专家使用这种语言互相讨论,或者域开发人员进行讨论时,很快就会发现模型中哪些地方不符合他们的需要,甚至是错误的。由于基于模型的语言要求十分精确,因此领域专家也将发现他们的想法中的一些矛盾和含糊之处。

​ 开发人员和领域专家可以通过一步一步地使用模型对象来走查场景,从而对模型进行非正式的测试。每次讨论都是开发人员和专家一起使用模型的机会,在这个过程中,他们可以互相加深理解,并对概念进行精化。

​ 领域专家可以使用模式语言来编写用例,甚至可以直接利用模型来指定验收测试。

2.4 文档和图

UML图无法传达模型的两个最重要的方面,一个方面是模型所表示的概念的意义,另一个方面是对象应做哪些事情。但是,这并不是大问题,因为仔细使用英语就可以很好地完成这项任务。

图是一种沟通和解释手段,它们可以促成头脑风暴活动。简洁的小图能够很好地实现这些目标。使用简化的图,图中只包含对象模型的重要概念部分,这些部分对于理解设计至关重要。

设计的重要细节应该在代码中体现出来。良好的实现应该是透明的,清楚地展示它的底层模型。互为补充的图和文档能够引导人们将注意力放在核心要点上。

务必要记住 模型不是图,图的目的是帮助表达和解释模型。代码可以充当设计细节的存储库。

1. 书面设计文档

一旦文档变成持久形式,往往就会从项目进展流程中脱离出来。它会跟不上代码或项目语言的演变。

文档应作为代码和口头交流的补充,极限编程不主张使用过多的设计文档,而让代码解释它自己。实际运行的代码不会说话,而其他文档则不然。运行代码所产生的行为是明确的。

​ 代码作为一种设计文档,自身也存在局限性。它可能会把读代码的人淹没在细节中。尽管代码的行为是非常明确的,但这并不意味着通过读代码就能显而易见地看出行为。而且行为的意义可能更难表示.

文档不应再重复表示代码已经明确表达出的内容

文档应该着重说明含义,以便使人们能够深入理解大比例结构,并将注意力集中在核心元素上。当编程语言无法直接明了地实现概念时,文档可以澄清设计意图。

文档应努力寻求生存之道并保持最新

文档必须深入到各种项目活动中去:注意听通用语言,观察它是如何变化的。如果设计文档中使用的术语不再出现在讨论和代码中,那么文档就失去了作用。或许是文档太大或太复杂了,或许是它没有突出一个十分重要的主题。人们不再阅读文档,或者对它失去了兴趣。如果文档对通用语言没有影响,那么一定是出问题了。

2. 完全依赖可执行代码的情况

2.5 解释性模型

image

标签:语言,模型,复杂性,领域专家,之道,文档,使用,第二章,代码
From: https://www.cnblogs.com/lhxBlogs/p/17322552.html

相关文章

  • 第二章(4)Pytorch安装和张量创建
    第二章(4)Pytorch安装和张量创建1.Pytorch基础PyTorch是一个基于Python的科学计算库,也是目前深度学习领域中最流行的深度学习框架之一。PyTorch的核心理念是张量计算,即将数据表示为张量,在计算时使用自动微分机制优化模型。在使用PyTorch进行深度学习时,了解张量的基础操作、类型、......
  • 在哪个平台可以优化谷歌排名:揭秘站长成功之道
    众所周知,谷歌搜索引擎优化(GoogleSEO)是站长们在运营外贸独立站时需要重点关注的一个方面。那么,在哪个平台可以优化谷歌排名,提升网站的竞争力呢?作为一名多年经验的站长,我将在本文中分享我的心得和建议。选择合适的优化平台优化谷歌排名的过程中,选择一个合适的平台至关重要。站长们应......
  • 第二章部分习题
    用穷举法找出1~100中的质数代码:usingnamespacestd;intmain(){intk=1;for(inti=1;i<=99;i++){k++;inta=0;for(intj=2;j<=i/2;j++){if(k%j==0){......
  • 谷雨策划:从落地实践的角度探索CMDB数据运营的破局之道!
    CMDB作为数字化运维的基石为各个IT系统提供可用性保障,CMDB不仅是企业的资源地图、数据央行,更是企业IT流程化和管理问题的抓手,但在CMDB建设和运营过程中,常常会出现IT数据孤岛、数据质量问题、数据完整性、数据消费场景薄弱甚至推广难,不好用,用不起来等问题。然而随着数字化转型的不断......
  • 空调负荷需求响应matlab 建立空调负荷的聚合模型,按照第二章考虑调节空调温度对空调响
    空调负荷需求响应matlab编程语言:matlab内容:建立空调负荷的聚合模型,按照第二章考虑调节空调温度对空调响应潜力的影响,程序结果充分说明随着上调温度的增大,响应程度逐渐增大。程序运行稳定ID:8350676488344145......
  • 2020计蒜之道预赛第二场-群星 题解
    题目描述蒜头君是一个P社玩家,每天从计蒜客下班回家之后的第一件事情就是打开《群星》,开始继续他的第四天灾之旅。这次他把注意力集中到了银河市场里面。银河市场里面商品的价格都通过以下公式计算:$$P=B*basePrice/S$$$$price=\displaystyle\frac{buy}{sell}*base......
  • C++第二章课后习题2-29,2-30
    2-29在程序中定义一个整型变量,倔以1~100的值。要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while、do…while语句实现循环。#include<iostream>usingnamespacestd;intmain(){inta=56;cout<<"请输入您要猜的数(0......
  • 第二章 MATLAB语言基础
    一、基本概念1、MATALAB主要数据类型 2、整数类型MATLAB中提供了8种内置的整数类型,如下:由于MATLAB中数值的默认存储类型是双精度浮点类型,因此必须通过表2-1中列出的转换函数将双精度浮点数值转换成指定的整数类型。在转换中,MATLAB默认将待转换数值转换为最近......
  • C++教材第二章课后习题 2-27
    用穷举法找出1~100的质数并显示出来,分别用while,do...while,for循环语句实现1#include<iostream>//for循环语句的实现2#include<cmath>3usingnamespacestd;4intmain()5{6inti,k,m;7for(k=2;k<=100;k++)//从2~1......
  • C++第二章课后练习 2-26
    实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete)S(ort)Q(ui Select one:”提示用户输入,A表示增加,D表示删除,S表示排序,Q表示退出,输入为A、D、S时分别提示“数据已经增加、删除、排序。”输入为Q时程序结束。(1)要求使用if…else语句进行判断,用break、continue 控制程序流程......