[答疑]心脏的功能是泵血,心脏是个模块,所以“功能模块”没毛病啊!

news/2024/9/23 18:19:37/

DDD领域驱动设计批评文集

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

《软件方法》各章合集


有同学在我的视频下留言: 

图片

其实认真看我的视频或书就明白,这和我说的不是一回事。

这个留言有点新意,和以往的留言如“人能说话,嘴就是人的说话模块,没错啊!”是不一样的,所以我特地来说一下这个留言,它体现了开发人员容易出现的一些问题:

(1)不知不觉切换研究对象

我们先来看“以人为例,心脏的功能是泵血”。

我的视频或书里的图是这样的: 

图片

“以人为例”,这时候研究对象是“人”,这时候说“功能”应该说“人”的功能,例如“扛煤气罐”,“功能模块”指的是“扛煤气罐模块”、“扛煤气罐子系统”。

外面的老板、老婆、老爸老妈、要的就是这些“功能”,人的构造是心肝脾肺肾还是电路板,其实无所谓,甚至经过“机械飞升”的身体更受欢迎! 

图片

研究“人”的时候,“心脏”和“泵血”只是人的一种可选的设计方案,不是需求。而“功能”说的是需求。

这位同学在这里,不知不觉切换了研究对象。

“不知不觉切换研究对象”可谓开发团队的一个大毒瘤。有的人可能出于无知,可能出于维护面子,可能出于逃避责任,经常有意无意祭出这件法宝。

你和他谈组织流程,他和你谈某个类的代码,你和他谈某个类的代码,他又和你谈组织流程。

开头的图片说到心脏,我们把这个套路继续往小里用,也可以说:

以人为例,神经细胞的功能是传递信号,神经细胞是个模块,所以:神经细胞是传递信号模块,没毛病吧!

以人为例,原子的功能……

(2)把行为和类一一对应

假设我们不研究人这么大的范围,改为研究心脏。我们要生产或培养棒棒的心脏,“卖”给需要的人或动物。

既然已经是研究心脏了,这时候,“心脏”就是我们研究的目标系统。

“泵血”是心脏的功能,这个没问题,但是,心脏还有其他功能:回收废物、调节内分泌。

我们所研究的系统的名字却不叫“泵血系统”、“回收废物系统”、“调节内分泌系统”或者“泵血+回收废物+调节内分泌系统”,它就叫“心脏”。

同理,心脏的使用者要的就是心脏的功能和性能。心脏是由肉还是电路板构成,这也是可选的设计方案。

注意,此时心脏是我们所研究的系统,不是“模块”。

当心脏被“卖”出去,安装在人体内,这时心脏才会成为人的一个模块。

所以,“心脏的功能是泵血,心脏是个模块”这样顺下来的说法是不正确的。

同样,这个模块不叫“泵血模块”、“回收废物模块”、“调节内分泌模块”或者“泵血+回收废物+调节内分泌模块”,它就叫“心脏”。

我们可以再扩展开。假设心脏被安在某个公司员工(例如女秘书)身上,此时,这个女秘书也成为公司的一个“模块”,但是这个模块名字不叫“为老板做A+为老板做B+为老板做C模块”,她就叫“秘书”。 

图片

把行为和类一一对应,这样的思想有什么问题呢?

会导致得到的类是“泵血er”、“回收废物er”、“调节内分泌er”,得不到“心脏”这样一个类。

参见:

《软件方法》第8章>>

可能有的同学会想,这个不挺好吗,这不就是“微服务”吗?

是哦,好棒,什么也不用思考就解决了复杂问题,天上真的掉免费的午餐了吗?

参见:

《软件方法》第1章>>

《你的医书是假的!》>>

**********


http://www.ppmy.cn/news/1512320.html

相关文章

杭州百腾教育科技 TiDB 6.5 to 7.5 升级记录

作者: reAsOn2010 原文来源: https://tidb.net/blog/612103f3 背景 使用 TiDB 作为我们的全量数据库已经有六七年了,当时还是 2.0 版本。早期TiDB的迭代和新特性的发布对于实际使用的影响还是很大的,所以从那个时候开始就有每…

Microsoft Edge 使用方法与秘诀概览

目录 ​编辑引言 Microsoft Edge 功能与技巧概览 掌握这些设置技巧,让 Edge 浏览器的体验更干净 1. 使用阅读视图 2. 开启广告过滤 3. 管理扩展 4. 个性化新标签页 5. 使用网页截图 6. 清理浏览器缓存 7. 管理启动设置 8. 自定义地址栏建议 9. 使用内置笔…

精通推荐算法26:行为序列建模之BST— Transformer建模用户行为序列

1 行为序列建模算法架构 2 BST背景 DIEN利用GRU循环神经网络来建模用户行为序列,捕获了用户行为的演变过程,以及行为间的相关关系,取得了非常不错的业务效果。但受制于GRU天然的串行计算方式,存在长程序列梯度弥散、串行计算影响…

气膜场馆:释放城市闲置土地的无限潜能—轻空间

在城市化进程中,许多边角闲置土地被长期忽视,成为城市发展的“盲点”。然而,这些看似无用的地块,蕴藏着无限的可能性。通过巧妙的规划和创新的建设,这些“盲点”可以转化为城市的“亮点”,不仅助力城市更新…

「Qt Widget中文示例指南」如何实现一个旋转框(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 旋转框示例展示了如…

精通推荐算法27:行为序列建模之BST— 代码实现

1 引言 上文 精通推荐算法26:行为序列建模之BST— Transformer建模用户行为序列-CSDN博客 讲解了BST的背景和模型结构,本文给出其代码实现,供大家参考。 2 BST核心代码 Transformer已经成为了算法工程师的必备技能,因此这一节给…

ISO 26262中的失效率计算:IEC 61709-Clause 10_Resistors and resistor networks

目录 概要 1 元器件分类和基准温度 2 失效率的计算 2.1 失效率预测模型 2.2 温度应力系数 2.2.1 温度应力系数计算模型 3.2.2 温度应力系数计算 结语 概要 IEC 61709是国际电工委员会(IEC)制定的一个标准,即“电子元器件 可靠性 失效…

Open3D 计算点云基本特征

目录 一、概述 二、特征计算公式 三、完整代码 3.1计算特征值和特征向量 3.2完整代码 四、实现效果 4.1原始点云 4.2数据显示 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博…