《软件方法(下)》第8章2023版连载(02)

news2024/11/19 15:39:16

DDD领域驱动设计批评文集

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

《软件方法》各章合集


8.1.5 重视分析工作流

分析,就是从核心域的视角构思系统的内部机理。

在现在的很多软件组织中,分析工作流的技能被严重忽视。很多开发人员上手就直接编码,原因并不是软件开发项目的核心域逻辑简单到了不需要分析,或者他的大脑发达到了在大脑里就可以完成分析的地步,而是开发人员缺乏分析的技能,只好草草跳过这一步。

此外,为了遮掩自己的无能,开发人员还会使用各种遮羞布——引入各种核心域逻辑之外的因素把水搅浑。

图片

图8-8 向核心域逻辑中引入其他因素

遮羞布一:时间

以“时间紧”、“敏捷”为借口,掩盖自己没有能力剖析复杂逻辑的事实——我是有能力剖析的,但时间太紧张了,等以后有时间吧!

遮羞布二:空间

借助“口头交流”、“白板”等容量小的介质,掩盖自己没有能力剖析复杂逻辑的事实——我是有能力剖析的,但白板空间太小了,只好简单画个“草图”了!

遮羞布三:功能需求之外的其他需求或设计因素

在思考核心域逻辑时,频频提出“这样会不会速度慢”(质量需求)、“我们想把它分成N个微服务,让不同团队用各自技术栈开发”(设计约束,也有可能是臆想的设计)等和核心域逻辑无关的因素,掩盖自己没有能力剖析复杂逻辑的事实——我是有能力剖析的,但还要考虑到这个因素、那个因素,所以精力就不够了。

遮羞布四:重构

以“后面再重构”为借口,结合其他遮羞布,掩盖自己没有能力剖析复杂逻辑的事实——我先随便写写,后面再重构,哎呀,没想到啊,时间来不及了(遮羞布一)。

关于重构,此处多说两句。

上世纪80年代末,Bill Opdyke(http://laputan.org/pub/papers/opdyke-thesis.pdf)和Bill Griswold(https://cseweb.ucsd.edu/~wgg/Abstracts/gristhesis.pdf)等人归纳了一些调整代码结构的手法,称为“重构”,后经Martin Fowler等人推广而广为流传。

“重构”的知识可以看作是建模知识的一个子集。如果开发人员真的熟练掌握重构的手法,很多情况下他已经有能力直接建模系统的核心域逻辑得到更合理的结构,根本不需要先走很多弯路再回正路。

要是开发人员以“重构”为理由拒绝思考,很可能他的所谓“重构”也是空话。

摸着石头过河是难免的,但应该在不得不摸的时候才摸,不应该假装看不见已有的路和桥,无论大小事都主动追求摸着石头过河。

当然,也有的人不是假装看不见路,而是真的看不见路——就是个睁眼瞎。不过,大脑不用思考,凭感觉摸着石头过河不停刷工作量,也是一种躺平的幸福。

用考试类比

学渣参加考试时,会这样遮掩自己的无能:

遮羞布一(时间):抱怨时间紧张或者故意提前交卷——如果再给我一些时间,我肯定做得出来。

遮羞布二(空间):故意带不好写的笔或抱怨草稿纸质量差、答题的地方太小——不是我不想好好答,可惜这个纸笔不给力。

遮羞布三(其他因素):抱怨和学科知识无关的其他因素,例如要求用仿宋体答题——不是我不会,写仿宋体耗费了我很多精力。

遮羞布四(重构):我先随便答,一会回来再检查。(结合遮羞布一)哎呀,来不及检查了。(结合遮羞布二)哎呀,答卷上地方不够了。

8.1.6 分析方法学的简单历史回顾

1958年,John W. Young Jr.和Henry K. Kent发表“Abstract formulation of data processing problems”,第一次提出在独立于实现的抽象级别上定义系统的规范。

图片

图8-9 摘自 “An abstract formulation of data processing problems”(Young JW, Kent HK,1958)

1959年,CODASYL(数据系统语言会议)成立。1962年,CODASYL提出了一个和Young/Kent类似的模型,称为“信息代数”(Information Algebra)。

1970-1980年代是结构化分析方法的时代,主要贡献者有Börje Langefors、Chris Gane、Trish Sarson、Tom DeMarco、Pin-Shan Chen、E. F. Codd等人。结构化分析的主要建模方法是数据流图和实体-关系图,这两者的结合,让软件开发人员有能力剖析大型系统。

图片

图8-10 摘自 Structured analysis and system specification(DeMarco T,1979)

图片

图8-11 摘自 The Entity–Relationship model: Towards a unified view of data(Chen PPS,1976)

1982年,Nastec公司开发出了DesignAid,这是第一款CASE(计算机辅助软件工程)工具。随后,其他CASE工具陆续出现。据PC Magazine的1990年1月30刊统计,当时已经有超过100家公司提供了将近200款CASE工具。

图片

图片

图片

图8-12 摘自PC Magazine 1990年1月30日刊(红框圈住的内容说明了工具的数量)

1980年代后期,面向对象的思想开始用于分析和设计。然后,UML统一了表示法。这部分历史已经在本书第1章“UML简史”部分讲述,此处不再赘述。

图片

图8-13 摘自 Object Oriented Analysis, 2nd Edition(Coad P, Yourdon E, 1990)

图片

图8-14 摘自 Object lifecycles. Modeling the world in states(Shlaer S, Mellor SJ, 1992)

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

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

相关文章

92 # express 中的中间件的实现

上一节实现 express 的优化处理,这一节来实现 express 的中间件 中间件的特点: 可以决定是否向下执行可以拓展属性和方法可以权限校验中间件的放置顺序在路由之前 中间件基于路由,只针对路径拦截,下面是中间件的匹配规则&#…

HTTP、TCP、SOCKET三者之间区别和原理

7层网络模型 网络在世界范围内实现互联的标准框架 7层为理想模型,一般实际运用没有7层 详细内容 HTTP属于7层应用层 BSD socket属于5层会话层 TCP/IP属于4成传输层 TCP/IP协议 三次握手 笔者解析: 第一次握手:实现第一步需要客户端主动…

【WSL】下载appx包将WSL装在非系统盘

装系统软件这事,主打一个小强精神 首先,准备好一个微软官方提供的安装包。下载链接:https://learn.microsoft.com/en-us/windows/wsl/install-manual#downloading-distributions 然后,剩下步骤在这个问题讨论中已经说明了&#xf…

【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本

前言 🍊缘由 Iphone15来了,两年之约你还记得吗? 两年前,与特别的人有一个特别的约定。虽物是人非,但思念仍在。 遂整合之前iphone13及iphone14的相关抢购代码,完成一个SpringBoot监听Iphone15有货邮件提…

PHP后台实现微信小程序登录

微信小程序官方给了十分详细的登陆时序图,当然为了安全着想,应该加上签名加密。 微信小程序端 1).调用wx.login获取 code 。 2).调用wx.getUserInfo获取签名所需的 rawData , signatrue , encryptData 。 3).发起请求将获取的数据发送的后台。 login: …

Nginx 解决内容安全策略CSP(Content-Security-Policy)配置方式

1、修改 nginx 配置文件 在nginx.conf 配置文件中,增加如下配置内容: add_header Content-Security-Policy "default-src self localhost:8080 unsafe-inline unsafe-eval blob: data: ;";修改后效果如下: 2、重启 nginx 服务 …

【CFD小工坊】模型网格(三角形网格)

【CFD小工坊】模型网格(三角形网格) 前言网格几何网格编号编程实现数据读入网格数据构建 本系列博文的是我学习二维浅水方程理论,直至编译一个实用的二维浅水流动模型的过程。(上一篇Blog回顾) 前言 本二维浅水模型将…

Docker部署Nginx+FastDFS插件

文章目录 一、部署FastDFS二、部署Nginx(带FastDFS插件)三、FastDFS上传文件Nginx访问验证 一、部署FastDFS 1、准备工作 docker pull qinziteng/fastdfs:5.05 Pwd"/data/software/fastdfs" mkdir ${Pwd}/{storage,tracker} -p2、创建TEST容器,将fastdf…

uniapp中vue3使用uni.createSelectorQuery().in(this)报错

因为VUE3中使用setup没有this作用域,所以报错 解决办法:使用getCurrentInstance()方法获取组件实例 import { getCurrentInstance } from vue;const instance getCurrentInstance(); // 获取组件实例 const DOMArr uni.createSelectorQuery().in(ins…

【C#】.Net基础语法二

目录 一、字符串(String) 【1.1】字符串创建和使用 【1.2】字符串其他方法 【1.3】字符串格式化的扩展方法 【1.4】字符串空值和空对象比较 【1.5】字符串中的转移字符 【1.6】大写的String和小写的string 【1.7】StringBuilder类的重要性 二、数组(Array) 【2.1】声…

大数据的崭露头角:数据湖与数据仓库的融合之道

文章目录 数据湖与数据仓库的基本概念数据湖(Data Lake)数据仓库(Data Warehouse) 数据湖和数据仓库的优势和劣势数据湖的优势数据湖的劣势数据仓库的优势数据仓库的劣势 数据湖与数据仓库的融合之道1. 数据分类和标记2. 元数据管…

RabbitMQ快速入门——消费者

public class Consumer_HelloWorld {public static void main(String[] args) throws IOException, TimeoutException {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory();//2.设置参数factory.setHost("172.16.98.133"); ip 默认值 localhostfac…

Vue3-Vue3生命周期、自定义hook函数、toRef与toRefs、其他组合式API、组合式API的优势、Vue3新的组件和功能

Vue3(2) 更多Vue.js知识请点击——Vue.js 🥔:有的山长满荆棘,有的山全是野兽,所以你应该是自己的那座山 文章目录 Vue3(2)一、Vue3生命周期二、自定义hook函数三、toRef与toRefs四、…

Ctfshow web入门 phpCVE篇 web311-web315 详细题解 全

CTFshow phpCVE web311 CVE-2019-11043 PHP远程代码执行漏洞复现(CVE-2019-11043)【反弹shell成功】-腾讯云开发者社区-腾讯云 (tencent.com) 漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx PHP-FPM 的服务…

RabbitMQ的工作模式——WorkQueues

1.工作队列模式 生产者代码 public class Producer_WorkQueues1 {public static void main(String[] args) throws IOException, TimeoutException {//1.创建连接工厂ConnectionFactory factory new ConnectionFactory();//2.设置参数factory.setHost("172.16.98.133&qu…

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow环境Keras环境Android环境1. 安装AndroidStudio2. 导入TensorFlow的jar包和so库3. 导入OpenCV库 相关其它博客工程源代码下载其它资料下载 前言 本项目依赖于Keras深度学习模型,旨在对手语…

idea更改java项目名

做了一个普通的java项目(使用socket进行网络通信的练手项目),需要更改项目名,更改过程记录在这里。 修改项目名可能会出现很多错误,建议先备份当前项目 1.在idea里,右键项目名——》选择Refactor——》选择…

服务注册发现_搭建单机Eureka注册中心

创建cloud-eureka-server7001模块 pom添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&quo…

Xshell工具连接本地虚拟机Linux系统

你知道的越多&#xff0c;你不知道的越多&#xff1b;本文仅做记录&#xff0c;方便以后备阅。希望也能帮到正在看这篇文章的你。 使用Xshell工具连接Linux系统具有方便&#xff0c;易于操作等诸多特点。对于Xshell的介绍&#xff0c;我就不详细说了。我相信百度百科上的介绍更…