《软件方法》第1章2023版连载(04)不了解ABCD工作流的危害

news2024/11/27 8:29:11

DDD领域驱动设计批评文集

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

《软件方法》各章合集

1.2 建模工作流

1.2.4 不了解ABCD的危害

1.2.4.1 思维颠倒

如果软件开发人员对以上的“A-业务建模”、“B-需求”、“C-分析”、“D-设计”工作流没有概念,就会把软件开发工作分为“写代码”和“写文档”两部分,产出的工件通通称为“设计”或者“文档”。

这时候,如果问开发人员在做什么,他可能回答“我在做设计”、“我在写文档”。其实,此时他的大脑可能正在思考组织的流程(A-业务建模),或者在思考系统有什么功能性能(B-需求),或者在思考系统要封装的领域概念之间的关系(C-分析),但他通通回答成“在做设计”、“在写文档”。

“设计”一词滥用,意味着在开发人员的脑子里,“设计”就是“代码以外的各种东西”。好,这时候有人又忽悠一句口号:代码就是设计,也就是说,代码就是“代码以外的各种东西”。这么一推导,就变成了:代码就是一切。

“文档”一词滥用,背后的认知错误和“设计”一样。不过,“文档”还暗示,它和“代码”可能是不同的工具写出来的。在Visual Studio、Android Studio、Eclipse……中写出来的叫“代码”,在Word、wiki、Visio、EA……中写或者画出来的叫“文档”。

开发人员对ABCD工作流缺乏认识以及把工件简单分割为“代码”和“文档(设计)”,意味着背后存在有意无意的误解:“文档”只不过是“代码”的一种比较概要或比较形象的表现形式,不同的“文档”代表着“代码”的不同视图,可以让开发人员从不同的视角观察代码,如图1-6所示。

图片

图1-6 误解:文档只是代码的视图

这种误解不只“普通”的开发人员会有。Martin Fowler所著的UML畅销书《UML精粹》,认为UML有三种用法:草稿、蓝图和编程语言,也是把UML模型看作是代码的视图——这是错误的。虽然Martin Fowler在某些社群的心目中如大神一般存在,但是从Fowler写作的其他书籍《重构》、《企业应用架构模式》、《分析模式》等可以知道,他的研究工作集中在“C-分析”和“D-设计”工作流,在“A-业务建模”和“B-需求”方面研究不多,他在这方面的言论,应谨慎看待。

更危险的是,把“文档”当作“代码”的视图还会带来思维颠倒:先拍脑袋实现,然后再从实现反推其他工作流的内容,导致其他工作流变成徒有形式的装模作样。我们来看几段我经历过的思维颠倒的对话:

★对话一

我:这个不应该是系统的用例(如果读者不理解什么叫“用例”,就先把它理解为“功能”好了)。

开发人员:是的!我都写好了,运行一下给你看,这个系统确实提供了这个用例。

是否系统的用例应该从“A-业务建模”来推理,通过愿景、业务序列图等步骤的推理后,觉得应该有,系统就有,不该有就没有。不能说,我写好了代码,所以就应该有。

★对话二

我:这两个类的关系不应该是泛化,而是关联。

开发人员:是泛化,不信我打开代码给你看(或:逆向工程转出类图给你看)。

是否泛化关系应该从领域逻辑来判断,领域逻辑不是,那就不是,代码就不应该那样写。不能先写好代码“人是猪的一种”(肯定编译通过),再用写好的代码来证明“人是猪的一种”。

★对话三

我:A聚合(组合)B,这个不太对。

开发人员:对的,你看我代码,A是聚合根,其他对象调用时要先找A,存取数据也是以它作为单元。

同对话二,是否聚合(组合)关系应该从领域逻辑来判断,领域逻辑不是,那就不是,代码就不应该那样写。

了解了ABCD工作流的概念,我们就知道,不同工作流产出的工件之间的区别不在于形式,而在于思考和表达的内容。

这时候,就不要再说“我在写文档”这种话了。“我在写文档”只是表达“我正在用文档编辑工具在工作”,没有其他意义。你在写什么文档?“A-业务建模”?“B-需求”?“C-分析”?我不写,我画图,难道不可以吗?我不写不画,我用语音清楚地表达组织的流程,难道不可以吗?我用Word编码(即D-设计),难道不可以吗?我用C#写需求(即B-需求),难道不可以吗?

更有意义的说法应该是“我在做业务建模”、“我在做需求”……如果说“文档”二字可以给你带来不可替代的快感,可以说“我在写业务建模文档”。

1.2.4.2 伪创新泛滥

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

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

相关文章

vulnhub_Empire_LupinOne靶机渗透测试

Empire_LupinOne靶机 靶机地址:Empire: LupinOne ~ VulnHub 文章目录 Empire_LupinOne靶机信息收集web渗透获取权限横向移动权限提升靶机总结 信息收集 通过nmap扫描得到靶机开放22和80端口,进行全扫描得到了一些服务版本信息等,web端有ro…

GitHub基础

1、仓库是什么意思?仓库拥有者是谁? 在软件开发或版本控制系统中,"仓库"(Repository)是指存储项目代码、配置文件、文档等相关文件的地方。它可以看作是一个中央存储库,用于管理和跟踪项目的各个…

v-bind绑定

一、标签属性动态绑定 方式一: v-bind:属性名"data声明的变量名" 方式二:(简写) 将v-bind省略,直接 :属性名"data声明的变量" v-bind.属性名[.修饰符]"变量名、计算属性。。 对应还提供了修饰…

【Docker】简易版harbor部署

文章目录 依赖于docker-compose下载添加执行权限测试 安装harbor下载解压修改配置文件部署配置开机自启动登录验证 使用harbor登录打标签上传下载 常见问题 依赖于docker-compose 下载 curl -L “https://github.com/docker/compose/releases/download/2.22.0/docker-compose-…

第八章 排序 十三、置换-选择排序

目录 一、概括 二、例子 ​三、考点 一、概括 置换-选择排序是一种排序算法,它通过在未排序的元素中选择最小的元素并将其放置在已排序的部分的末尾来逐步将列表排序。具体过程如下: 从列表中选择最小的元素,并将其与列表中第一个元素交…

一文看懂光模块的工作原理

你们好,我的网工朋友 光模块有很多类别,是我们经常要用到的PHY层器件。虽然封装,速率,传输距离有所不同,但是其内部组成基本是一致的。 以太网交换机常用的光模块有SFP,GBIC,XFP,X…

【周末闲谈】“PHP是最好的语言”这个梗是怎么来的?

个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言,模仿还是超越? ✨第二周 畅想AR 文章目录 系列目录前言最早的出处关于PHP语言优点缺点网络评价 总结 前言 …

kafka日志文件详解及生产常见问题总结

一、kafka的log日志梳理 日志文件是kafka根目录下的config/server.properties文件,配置log.dirs/usr/local/kafka/kafka-logs,kafka一部分数据包含当前Broker节点的消息数据(在Kafka中称为Log日志),称为无状态数据,另外一部分存在…

Vue中如何进行网页截图与截屏

在Vue中实现网页截图与截屏功能 网页截图与截屏功能在许多Web应用程序中都非常有用。Vue.js作为一个流行的JavaScript框架,提供了许多工具和库来简化网页截图和截屏的实现。本文将介绍如何使用Vue来实现一个网页截图和截屏功能的示例,包括使用html2canv…

锁向环到底是什么?是怎么进行倍频的?

你们有没有这样一个疑问,就是CPU的主频怎么做到几个GHz呢? 每一秒要给处理器几亿个脉冲,就拿11代I7处理器来说,它的基本频率就可达2.5GHz,但在我们常规的认知中,频率的大小取决于晶振的频率,比…

黑马JVM总结(二十八)

(1)语法糖-foreach (2)语法糖-switch-string (3)语法糖-switch-enum (4)语法糖-枚举类 枚举类 (5)语法糖-twr1

云表|都有生产管理模块,MES和ERP有什么不同,该如何选择

MES和ERP是生产制造领域的两大知名系统,虽然早已声名鹊起,但仍有不少人难以明确区分两者的差异。下面将详细阐述这两个系统的不同之处。首先,要了解MES和ERP的定义。 MES系统:全称制造执行系统(Manufacturing Executio…

【软考】8.2 编译程序基本原理/文法/正规式/有限自动机

《编译程序基本原理》 编译过程 词法分析: 针对单词;输入是字符;读的是字符流;语法分析: 针对语句;读的是记号流,即词法分析产生的一个个单词语义分析(针对语句含义) a.…

Javascript中的模块化详解

1.什么是模块化、模块化开发? 事实上模块化开发最终的目的是将程序划分成一个个小的结构; 这个结构中编写属于自己的逻辑代码,有自己的作用域,不会影响到其他的结构; 这个结构可以将自己希望暴露的变量、函数、对象等…

漏洞复现--时空智友企业流程化管控系统敏感信息泄露(POC)

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

进程状态的理解

我们知道进程会有属于自己的PCB,便于操作系统的管理,而PCB结构体里面还有进程状态参数,类似于用一个变量标识对应的进程状态,就相当于将每个进程状态编号,而PCB中有一个变量存储当前进程状态所对应的编号,也…

国庆要闻回顾 | OpenAI 拟研发 AI 手机;9月以太坊上NFT销售量创2021年2月以来最低记录...

国庆期间区块链行业要闻回顾:产业方面,全国区块链行业产教融合共同体在雄安新区成立,巴西推出基于区块链的数字身份证,瑞银集团在以太坊上推出代币化货币市场基金试点,NASA拟在月球设立区块链数据中心以保存国家机密资…

周总结【java项目】

项目进度: 学习了JavaFX,下载了sceneBuilder辅助工具构建窗口(目前建立了登陆,注册,忘记密码的界面),然后是学习了MySQL的连接,现在的项目是刚连上数据库; 下一步&…

【研究的艺术】通读《The Craft of Research》

通读《The Craft of Research》 前言1. 跟读者建立联系2. 明白问题的重要性3. 组织论述4. 论点4.1 Making Claims4.2 Assembling Reasons and Evidence4.3 Acknowledgments and Responses4.4 Warrants 未完待续。。。 前言 本篇博客是《The Craft of Research》的通读笔记&…

Hudi 系列-基础概念-索引机制

目录 前言问题作用减少开销怎么理解数据变更基础 类型全局索引FlinkSpark 总结 前言 Hudi 系列文章在这个这里查看 https://github.com/leosanqing/big-data-study 索引(Index)是 Hudi 最重要的特性之一,也是区别于之前传统数仓 Hive 的重要特点, 是实现 Time Travel, Update…