《软件方法》第1章2023版连载(03)建模工作流

2023-09-21 23:39:39

DDD领域驱动设计批评文集

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

《软件方法》各章合集

1.2 建模工作流

1.2.1 建模工作流ABCD

如何能做好需求和设计,达到“低成本制造好卖的系统”的目标?并非喊喊口号就可以,需要静下心来学习和实践一些必要的建模技能。

软件开发是增量、迭代进行的,每一个迭代周期都需要依次思考这么几个事情:

A-业务建模(business modeling)——定位需要改进的目标组织以及该组织接下来最需要改进的问题。

B-需求(requirements)——描述为了改进组织的问题,所引入的信息系统必须具有的整体表现。

C-分析(analysis)——提炼为了满足功能需求,所引入的信息系统需要封装的核心域机制。

D-设计(design)——考虑质量需求和设计约束,将核心域机制映射到选定非核心域上实现。

本书将以上ABCD称为软件开发的4个建模工作流。

如果采用本书的方法学以及UML表示法,其ABCD大致如图1-5。读者先看一眼即可,后文再详细解说图中内容。

图片

图1-5 四个建模工作流(本书方法学+UML)

软件江湖中各种花里胡哨的用语,不管是真创新还是伪创新,基本上都可以用上面的ABCD来归纳,例如:

产品经理、需求工程师、需求分析师:A+B+部分C。

业务架构师:可能是A(此时“业务”的含义是“组织”),也可能是C(此时“业务”的含义是“核心域”)。

系统架构师:C+D。常有团队说要改进系统架构,其实他想改进的是B-需求。

领域驱动设计:C+D。也有团队声称要学习“领域驱动设计”,其实想解决的却是A-业务建模。

中台:C+D

微服务:C+D

设计模式:C+D

……

欢迎读者随时补充更新。

1.2.2 关于用词

“工作流(workflow)”沿用自RUP(Rational Unified Process)的早期版本,后来的RUP版本改为“科目(discipline)”。

在我看来,“工作流”和“科目”这两个词都不算太好,但目前没有更合适的选择,暂时先用“工作流”。

4个工作流的名称“业务建模”、“需求”、“分析”、“设计”沿用了以往各个方法学的用语,这些用语也不严谨。

例如,“业务建模”末尾有一个“建模”,其他3个却没有,难道其他3个不是建模?如果把其他3个也加上尾巴“建模”,就变成批量刷废话了;如果把“业务建模”的“建模”去掉剩下“业务”,意思已经不对。

甚至“业务”二字都是模糊用语,这个后文再详述。

更贴切的名称可能是:A-组织价值、B-系统责任、C-核心域逻辑、D-实现,但再三权衡,还是沿用之前的用语。

如果读者真正理解了ABCD的内容,叫什么问题都不大,改成A-阿猫、B-阿狗、C-阿鸡、D-阿鸭也无所谓。

1.2.3 逃不掉的思考

在迭代周期中,如果要追求好的结果,按A→B→C→D的顺序来进行推理是必须的,而且各个开发团队一直都在这样做。我们来看几个场景:

开发团队甲,所有成员都认真学习《软件方法》和认真做题,引进了UML和建模工具EA,并按照书中的改进指南改进,最终得到很不错的结果。开发团队甲的A→B→C→D很容易看出来。

开发团队乙,没听说过《软件方法》,也不用UML和EA,用的是技术总监自己归纳的一套“软件工程方法学”和符号,也还算行之有效。开发团队乙的A→B→C→D也容易看出来,但形式上和开发团队甲不同。

开发团队丙,快乐拥抱挂着“敏捷”或“领域驱动设计”名头的伪创新。这些伪创新投资少,见效快,门槛低,产量大,仪式感十足。开发团队轻松愉快、热热闹闹地讨论和糊墙。这里面有A→B→C→D吗?也许有一点,但很少,这些热闹只是装模作样。真正的A→B→C→D推理,可能是在编码的时候在大脑里朦朦胧胧进行的,推理的质量可想而知。

开发团队丁,觉得既然ABC我都不会,我也不想装模作样,就一步到D,直接编码。这种情况下,还有A→B→C→D吗?有的,和开发团队丙差不多,A→B→C→D推理,是在编码的时候在大脑里朦朦胧胧进行的,同样,推理的质量可想而知。幸好,省去了伪创新装模作样的成本。

开发团队戊的故事(纯杜撰,勿对号入座)看起来有点不一样。他们所在的公司赶上了风口,成了某个领域(例如预制菜)的互联网巨头。在开发和维护预制菜相关的项目时,开发团队戊觉得现在的前端框架Vue、React等还差点意思,于是搞了个内部项目,自研前端框架“闪电五连鞭”。过了几年,也许是风潮过了,也许是历史使命已经完成,预制菜市场冷却,反倒是“闪电五连鞭”框架受到全世界开发人员热捧,成为公司的生存支柱。这里面有A→B→C→D吗?看起来像是颠倒了? 

再看一个特别的,程序员张三自己做一个东西给自己用。张三只会用编码工具,也没学过UML或类似的知识,这里面还有A→B→C→D的推理吗?

最后这两个,答案也是肯定的,并没有什么特别,具体留到后文详述。

总之,每一个软件项目,只要不是故意摆烂,开发团队都会有A→B→C→D的推理过程——也许无意识、隐式地做,也许有意识、显式地做;也许推理过程严谨合理,也许推理过程漏洞百出;也许分成很多人来做,也许一个人做;推理产物的形式也许是UML模型,也许是其他……

就像一道复杂的数学填空题,答案是97/2023,如果考生能填对这个正确答案,他必然在考试过程中的某个时间点做了正确的推理。只要不是故意摆烂,即使是学渣,也会尝试着去推理。只不过相对于学霸的一击必中,学渣可能要反反复复“敏捷探索”多次才答对,甚至直到考试结束还没答对。

本书希望教给读者一种严谨和高效的推理方法,当然,要掌握它没那么容易。

更多推荐

【华为云云耀云服务器L实例评测】- 云原生实践,快捷部署人才招聘平台容器化技术方案!

🤵‍♂️个人主页:@AI_magician📡主页地址:作者简介:CSDN内容合伙人,全栈领域优质创作者。👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)摘要:感谢华为云提供的测

线性矩阵不等式(LMI)在控制理论中的应用

目录(一)Matlab中的LMI处理工具包(二)为什么LMI成为控制理论领域重要工具?(三)LMI在与Lyapunov不等式的关系(1)线性矩阵不等式(2)线性矩阵不等式系统(3)舒尔(Schur)补(四)LMI中常见引理引理2(广义KYP引理[4])推论1(广义KYP引理推论[4])引理3(射影定理[1])引理4(J

港联证券:十一黄金周将至,旅游出行板块强势拉升,长白山一度涨停

游览出行板块18日盘中发力拉升,到发稿,长白山涨近7%,盘中一度触及涨停;全聚德、中国中免涨逾5%,君亭酒店、锦江酒店涨约4%,首旅酒店、金陵饭馆、三特索道、曲江文旅等走高。消息面上,伴随暑期游收官,十一黄金周游览产品预订炽热进行中。境内游方面,依据携程黑板报数据计算,国庆出游需求热度一路上扬,到9月6日,国内游览产品

短视频矩阵系统,短视频矩阵源码技术开发

开发短视频矩阵系统的源码需要以下步骤:确定系统需求:根据客户的需求,确定系统的功能和特点,例如用户注册登录、视频上传、视频浏览、评论点赞等。设计系统架构:根据系统需求,设计系统的整体架构,包括前端、后端、数据库等组件的功能和交互方式。选择技术栈:根据系统的特点和需求,选择适合的技术栈,包括前端框架、后端语言、数据库等。

【每日一题】74. 搜索二维矩阵

74.搜索二维矩阵-力扣(LeetCode)给你一个满足下述两条属性的mxn整数矩阵:每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。给你一个整数target,如果target在矩阵中,返回true;否则,返回false。示例1:输入:matrix=[[1,3,5,7],[10,11,1

旅游旺季,酒店要如何做好报修管理工作?

随着旅游业的蓬勃发展,每年的旅游旺季都会带来大量的游客涌入各个城市和景区,这也使得酒店行业的客流量激增。为了满足客人的需求,酒店必须提供高质量的服务和舒适的住宿环境。然而,由于客流量的增加,酒店的设备使用频率也随之增加,容易出现故障和损坏的情况。这不仅会影响客人的入住体验,还可能引发安全隐患。因此,酒店管理者需要高度关

快速用Python进行数据分析技巧详解

概要一些小提示和小技巧可能是非常有用的,特别是在编程领域。有时候使用一点点黑客技术,既可以节省时间,还可能挽救“生命”。一个小小的快捷方式或附加组件有时真是天赐之物,并且可以成为真正的生产力助推器。所以,这里有一些小提示和小技巧,有些可能是新的,但我相信在下一个数据分析项目中会让你非常方便。Pandas中数据框数据的P

基于JAVA+SSM+微信小程序+MySql的图书捐赠管理系统设计与实现

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌🍅文末获取项目下载方式🍅一、项目背景介绍:在当今社会,图书捐赠是一种普遍而有益的行为,旨在促进阅读、教育和知识传播。图书捐赠可

手动模式配置链路聚合

以下图配置为例:各PC配置如下配置LSW1#划分vlan1030<Huawei>sysEntersystemview,returnuserviewwithCtrl+Z.[Huawei]sysnameLSW1[LSW1]diSep16202314:23:44-08:00LSW1DS/4/DATASYNC_CFGCHANG

记:sx1278芯片

目录lora数字接口静态配置寄存器状态寄存器lora模式FIFO数据缓存数字IO引脚映射FIFO操作原理lora调制解调器操作模式LoRa调制解调器状态机序列数据发送序列数据接收序列单一接收操作模式连续接收操作模式从FIFO数据缓存提取有效负载数据基于前导码起始的数据包过滤lora数字接口lora调制解调器有三种数字接

计算物理专题----随机游走实战

计算物理专题----随机游走实战Problem1Implementthe3Drandomwalk拟合线自旋的拟合函数(没有数学意义)参数:0.627,3.336,0.603,-3.234自由程满足在一定范围内的均匀分布以标准自由程为单位长度,可得到均匀分布的统计特征方均根距离与平均自由程的比值满足P1-a.pyimpo

热文推荐