[答疑]漏斗图,领域驱动设计叒创新了?

news2024/11/28 18:49:59

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集


albert 2024-1-1 21:11

这篇文章说用DDD重构****,演示了一种漏斗图,请教潘老师,这个图是DDD提出来的吗,您怎么评价?

图片

UMLChina潘加宇

我看了你说的文章。

(1)作者画的不是“漏斗图”。

漏斗图(Funnel Chart)是描述某个变量的值随着流程(例如销售、招聘等)的进行逐渐减少的情况,例如:

图片

图1

也可以横过来,例如:

图片

图2

漏斗图在商业中应用得比较多。下图摘自20多年前的营销领域书籍:

图片

图3 摘自:《八种武器No.1:大客户销售策略(最新修订版)》,付遥 著,2002年1月出版。

画漏斗图的目的是讨论:到底什么环节出了问题,为什么会被过滤掉这么多?

例如,图1这张漏斗图,发出去5万多,购买的只有500多(不知道发的啥,如果是Email,这个转化率似乎已经很棒了?)。

而你说的文章中的图,作者的目的是这个吗?难道作者觉得最终通过重重检查的房间个数太少,要找到其中的病根?

★不得不说,问题所给图中的右下角那一连串的“失败”,刷工作量刷得真爽。

(2)作者可能想画的是Nassi-Shneiderman图(Nassi-Shneiderman Chart)。

Nassi-Shneiderman图,也称N-S图或盒图。它由Ben Shneiderman和Isaac Nassi于1973年提出(https://www.cs.umd.edu/hcil/members/bshneiderman/nsd/1973.pdf)。发明者的初衷是:既然程序中要避免使用Goto语句,那么表示法也应该避免使用流程图中带箭头的线条。

N-S图和流程图的对应如下:

图片

图4 摘自Visual Programming, Shu, N. C. , 1988

N-S图的内容,国内的软件工程教材一般都会有,目前也还是软考的知识点。

当然,文章作者并没有在文章里说这是作者的创新或DDD的创新,应该只是不了解这些知识。

**********

DDD圈子的同学,如果想“创新”,可以先稍微认真学习一下前人的知识,然后把“盒图”创新为“领域驱动设计●思辨匣●画布”。

注意仪式感!

不要说“逻辑”,说“思辨”,不要说“盒”,要说“匣”,不要说“图”,要说“画布”,而且一定要强调手绘,糊墙!

我多次批评过,DDD圈子有封闭引用的特点。例如,问题所提文章末尾列出5篇参考文献,均在DDD圈子内部。

所以,可以考虑圈子中派出一个人,包装或创新一个“领域驱动设计●思辨匣●画布”,以后就可以作为圈子内引用的根源。

**********

以下是本问题的扩展:

(3)N-S图的进一步知识

一张图由若干顶点和若干边组成,显式的表达是连接型。

例如,下面几张图是等价的:

图片

图5 连接型表示

如果硬要说“怎么一样呢,一个长一个短,一个上一个下”,要关注这个的话,需要给边(或顶点)添加属性来表达。

流程图可以看作以连接型的方式表达的图。

如果引入某种隐含的约定,就可以让边退化,变成邻接型或包含型。

邻接型如:

图片

图6 邻接型表示

图6可能就隐含了约定:邻接处存在从左到右或从上到下的有向边。

这时,A、B的相对位置可就不能乱放了,也没法再给边添加属性(名称、权值等)。

包含型,相当于把图7改成图8:

图片

图7 连接型表示

图片

图8 包含型表示

同样,图8中,A和B之间的关系是隐含的,B的位置和大小受到严格限制。

★注意,图5-图8只是普通的图形演示,和具体的表示法如UML无关。

N-S图可以看作边退化之后的流程图。

关于连接、邻接、包含这几种表示方式的优缺点和适用性,应该有过很多研究,而且不只是计算机和软件行业。毕竟各行各业都需要图形表示法,这是一个普遍的问题。但这方面更详细的内容我也没有研究过,感兴趣的读者只好自己查询了。

就我了解稍多一点的软件建模工具EA来说吧。EA除了支持UML/SysML,还支持各种各样的表示法,包括已经可以被取代的流程图、E-R图、数据流图等,但这些表示法都是“连接型为主+包含型为辅”,没有像N-S图这样把连接型干掉的。

例如,UML的类图中,类和类之间的关系表达是连接型的,类和属性、操作之间关系的表达则是包含型的,属性和操作画在类框里。

UML的类图表示法主要来自Rumbaugh的OMT。Rumbaugh曾在他的书中比较了OMT的类图和E-R图,如图9。可以看出,图9中的E-R图全部是连接型的表示。

图片

图9 摘自Object-Oriented Modeling and Design, James R. Rumbaugh等,1991

我之前也写过一篇:

[答疑]把聚合关系画成方框套方框是不是更好

**********

最后说一句,像问题所提到文章中的逻辑,更合适画的图可能是状态机图。

(4)DDD文章的老问题

就拿问题给出的这张被称为“漏斗图”的图来说,如果系统的复杂逻辑就是这样沿着一根轴几十个条件判断下来,那这个系统还真不算复杂。

复杂的难道不是“分区参数正确”、“用户权限正确”等这几十个条件的真假是怎样得出来的吗?结果在文章里看不到,大量的内容讨论分层、六边形架构。

啥?这些规则都已经由张三在别的地方封装好,作者这边只需要调用就行了?如果是这样,那应该让张三来写DDD美文才对呀!

这也是各种各样的领域驱动设计文章的一个普遍的致命问题,说来说去一大堆,却没有能力把最难的规则显式建模。当然,如果文章作者有能力做这个,他压根就不会相信这些伪创新,自然也就不会有各种奇奇怪怪的DDD文章。

其他文章供参考:

《软件开发团队的脓包》里面的“废话迷”部分

[答疑]是不是互联网更适合用DDD

**********

逆境求生:《软件方法》思考利器助你凛冬“创业”

[EA-029/石油钻井管理平台]35套UML/SysML+EA/StarUML的建模示范视频-全程字幕

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

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

相关文章

系列三十五、获取Excel中的总记录数

一、获取Excel中的总记录数 1.1、概述 使用EasyExcel开发进行文件上传时,通常会碰到一个问题,那就是Excel中的记录数太多,使用传统的方案进行文件上传,很容易就超时了,这时可以通过对用户上传的Excel中的数量进行限制…

优雅的通过Shell脚本生成Go的程序包

前言 随着Go语言的普及,越来越多的开发人员选择使用Go编写代码。虽然越来越多的公司项目已使用持续集成/持续部署(CI/CD)工具,用于自动化构建、测试和部署Go程序包,但存在一些部署在ECS服务器的Go程序包或需要手动编译…

编译原理Lab4-使用LightIR框架自动产生cminus-f语言的LLVM IR

[[#实验框架|实验框架]][[#实验过程|实验过程]] [[#实验过程#全局变量的设计|全局变量的设计]][[#实验过程#1ASTProgram|1ASTProgram]][[#实验过程#2ASTNum|2ASTNum]][[#实验过程#3ASTVarDeclaration|3ASTVarDeclaration]][[#实验过程#4ASTFunDeclaration|4ASTFunDeclaration]]…

概率论与数理统计 知识点+课后习题

文章目录 💖 [学习资源整合](https://www.cnblogs.com/duisheng/p/17872980.html)📚 总复习📕 知识点⭐ 常用分布的数学期望和方差 📙 选择题📙 填空题📙 大题1. 概率2. 概率3. 概率4. P5. 概率6. 概率密度…

读元宇宙改变一切笔记01_起源

1. 元宇宙是我们下一个生存之地 1.1. 1968年,只有不到10%的美国家庭拥有彩色电视,但当年票房排名第二位的电影《2001:太空漫游》(2001: A Space Odyssey)设想了这样的未来 1.1.1. 斯坦利库布里克(Stanley Kubrick) …

react-router-domV6.21.1版本结合ant design mobile的TabBar标签栏和Popup弹出层实现移动端路由配置

react-router-demo react-router-dom在V6版本之后更换了很多的API名称,在ant design mobile的TabBar配置中还是之前的旧版本,比如使用了switch组件等。我们在这里使用新版本的react-router-dom进行react移动端的配置 首先使用npm下载最新版的react-rout…

【前端设计】小球loading动画

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 html <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

YOLOv5改进 | 主干篇 | CSWinTransformer交叉形窗口网络改进特征融合层

一、本文介绍 本文给大家带来的改进机制是CSWin Transformer,其基于Transformer架构,创新性地引入了交叉形窗口自注意力机制,用于有效地并行处理图像的水平和垂直条带,形成交叉形窗口以提高计算效率。它还提出了局部增强位置编码(LePE),更好地处理局部位置信息,我将其…

File-一个IO流中至关重要的类

File类 概述&#xff1a;文件和目录路径名的抽象表示&#xff0c;File 对象就代表一个路径 对与File而言&#xff0c;其封装的并不是一个真正存在的文件&#xff0c;仅仅是一个路径名而已。它可以是存在的&#xff0c;也可以是不存在的。将来要通过具体的操作把这个路径的内容…

构建高效PythonWeb:GraphQL+Sanic

1.1 简介&#xff1a;在当今快速发展的技术时代&#xff0c;Web应用的性能和灵活性变得越来越重要。在众多技术中&#xff0c;GraphQL和Sanic以其独特的优势脱颖而出。GraphQL&#xff0c;作为一个强大的数据查询语言&#xff0c;为前端和后端之间的通信提供了极大的灵活性。而…

HCIA-Datacom题库(自己整理分类的)_09_Telent协议【13道题】

一、单选 1.某公司网络管理员希望能够远程管理分支机构的网络设备&#xff0c;则下面哪个协议会被用到&#xff1f; RSTP CIDR Telnet VLSM 2.以下哪种远程登录方式最安全&#xff1f; Telnet Stelnet v100 Stelnet v2 Stelnet v1 解析&#xff1a; Telnet 明文传输…

Oracle-expdp备份变慢问题分析

问题背景&#xff1a; 应用有一个每日跑批之前的备份作业&#xff0c;通过expdp备份应用的用户数据&#xff0c;数据量大概为600G左右&#xff0c;正常情况下可以在20分钟内跑完&#xff0c;但最近expdp备份完成时间却突然猛涨到要2小时32分才能备份完&#xff0c;导致后续的跑…

使用 MONAI 加载和保存各种格式的医学图像

本教程属于实战&#xff0c;手把手教你加载各种医学图像数据&#xff08;nii.gz, .dcm, .png等&#xff09;。并学会查看医学图像数据的元数据&#xff08;shape, affine, orientation&#xff09;。学会使用monai全方位了解你的数据&#xff0c;并把它用于之后的深度学习训练。…

最新ChatGPT网站系统源码+详细搭建部署教程+Midjourney绘画AI绘画

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

数据版本控制利器LakeFS的介绍,以及其使用方法,与其它工具结合案例

LakeFS介绍 LakeFS 是一个开源的数据湖版本控制系统&#xff0c;可以帮助用户管理和控制数据湖中的数据版本。以下是LakeFS的一些主要用处和功能介绍&#xff1a; 数据版本控制&#xff1a;LakeFS 提供了类似于 Git 的版本控制功能&#xff0c;可以跟踪和管理数据湖中的数据版…

智能合约:3分钟开发ERC20 token(2)

0.前言 上一节我们讲到了开发智能合约的准备工作&#xff0c;以及在线编程平台remix 智能合约&#xff08;1&#xff09; 这一节讲解如何开发、发行一个代币&#xff0c;并具备包括代币铸造mint&#xff0c;转账transfer和销毁burn功能&#xff0c;并确保合约拥有者owner的权限…

HEVC 视频扩展安装包,WIN10上看苹果的照片格式

苹果手机照片放电脑上&#xff0c;后缀名称.HEIC&#xff0c;打开居然要下载 HEVC 视频扩展包才能查看&#xff0c;网盘找到一个记录一下&#xff0c;安装后就可以查看苹果手机照片了。 链接&#xff1a;https://pan.baidu.com/s/13ye9_6brXD32jWAjfS47gQ?pwd36k5 提取码&am…

vue结合Cesium加载gltf模型

Cesium支持什么格式&#xff1f; Cesium支持的格式包括&#xff1a;3D模型格式&#xff08;如COLLADA、gITF、OBJ&#xff09;、影像格式&#xff08;如JPEG、PNG、GeoTIFF&#xff09;、地形格式&#xff08;如STL、Heightmap&#xff09;、矢量数据格式&#xff08;如GeoJSON…

[AutoSar]基础部分 RTE 05 Port的实例化和初始化

目录 关键词平台说明一、端口类型二、端口的实例化2.1 创建application port2.2 实例化 三、初始化 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、端口类型 如下图所示&am…

java 生成一个当前时间的时间搓

开发过程中 用时间搓数值格式存储 会更加精准 那么 我们在一些日常增删查改中就可以用时间搓来记录操作时间 就一行代码 long timestamp System.currentTimeMillis();他就能生成当前时间的时间搓 运行结果如下 然后 我们可以在 http://shijianchuo.wiicha.com/ 上进行转换查…