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

DDD领域驱动设计批评文集

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

《软件方法》各章合集


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

图片

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

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

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

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

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

图片

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

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

图片

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图片

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

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

参见:

《软件方法》第8章>>

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

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

参见:

《软件方法》第1章>>

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

**********

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值