[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”

DDD领域驱动设计批评文集

欢迎加入“软件方法建模师”群

《软件方法》各章合集

天赐 2023-8-5 16:00

我学习了您的视频(答疑者删去若干赞扬句子)……,面向舞台归类到1-4里面的哪一个?

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第1张图片

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第2张图片

******

补充背景:

美女放电还是整形-从《人月神话》误译谈状态机图>>

07-凤姐学术妲己--抱歉!二十二年前我们没看懂《人月神话》,https://b23.tv/YU4kMjP

那道“未曾开言先转腚”建模竞赛题的解析,https://b23.tv/TtHBca6

******

UMLChina潘加宇

①-④只是把从几个行为变化而来的“形容词”列出来,和描述性形容词对比,看哪一个更适合作为状态的名称。

"面向舞台"应该不属于①-④中的任何一个,它相当于把“属性(包括关联)”变化为“状态”。

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第3张图片

这样的命名,优先级排在①之后,但排在另外几种命名(已转腚、转腚中、待转腚)之前。

你想想,假设导师转腚之后,状态叫“已转腚”,那么,导师再转腚一次,转回去后,这个状态叫什么?“㕛转腚”,“已转回”?或者把“转腚”事件拆成两个?“由正转反”、“由反转正”,以达到一一对应的效果?

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第4张图片

别说,某些领域驱动设计伪创新可能就会这么干,因为这样的做法符合领域驱动设计伪创新投资少、见效快、产量高、门槛低的特点。

针对以上说的“一一对应”问题,我已经在文章《DDD话语批评之一:评“状态和事件本质相同”》中说过,此处不再重复。

沿着凤姐那张图上的“结婚”讨论下去,可以借用《DDD话语批评之一:评“状态和事件本质相同”》中我画的一张状态机图,看看是否能帮助理解。 

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第5张图片

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第6张图片

凤姐结婚,有什么状态变化?

如果和行为挂钩,可以是“未婚→已婚”,如果和属性挂钩,可以是“无配偶→有配偶”。

“无配偶、有配偶”比“未婚、已婚”更合适。

行为、属性、状态不是一一对应的。相对于状态绑定行为来说,状态绑定属性的危害更小,因为适用的行为规则是基于当前属性值(组合)来判断的。

(1)假设某国法律规定,允许一夫多妻或一妻多夫,此时绑定行为的“已婚”作为状态不合适,当然,“有配偶”作为状态也还不够,可以在“有配偶”里加子状态“配偶满”和“配偶未满”。

(此处可能有人会问:“配偶未满”和“无配偶”有啥区别,区别就是一个能“丧偶”,另一个不能。鲁迅曾说过:人类的悲欢并不相通,比丧偶还惨的是无偶可丧,今天你对我爱搭不理……)

(2)从“有配偶”变成“无配偶”,路线不止一条,可能是“离婚”,也可能是“丧偶”。

(3)看了罗翔老师的普法视频(张三泡上董事长女儿案),本来觉得还漏了一个,从“无配偶”到“有配偶”的路线也不止一条(事实婚姻),但又查了一下,1994年之前的事实才算,1994以后的都不算了。

我们再扩展开来看可能会有的另外几个问题

(1)把事件“结婚”、“离婚”、“丧偶”改成“配偶++”、“配偶--”甚至改成“修改状态为**”,可以吗?

答:

不好。行为和属性不是一一对应的,这些事件除了带来配偶数量的变更之外,还有涉及到其他属性(例如财产)的各自不同的逻辑。

不过,这样即使不好,也比把状态直接和行为绑定要好,如下图,危害程度①<②<③

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第7张图片

至于把事件改成“修改状态为***”,这倒是一个领域驱动设计伪创新可以发掘的创新点。

什么情况下该修改到什么状态,这个逻辑在哪里呢?简单,有个(上帝扔下来的)算法啊!

所以,我们留心领域驱动设计伪创新的文章(包括我批评过的),会发现它类图也没有,状态机图也没有,但是它会有一个或几个类叫“**er”、“**or”、“**器”、“**rule”、“**规则”、“**策略”、“**算法”,精华都在那里面藏着呢,上帝会帮他们搞定的。

(2)假设某国法律对离婚和丧偶另眼看待,认为离婚的人道德败坏,丧偶的人不祥,会多加一些限制,例如不允许当老师……,那么是不是应该可以把状态命名为“已离婚”、“已丧偶”?

答:

这只是说明,此时“法律”这个“系统”关注的属性多了几个,包括“离婚(史)”、“丧偶(史)”,适用的行为规则依然是基于当前属性值(组合)来判断的:

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第8张图片

(注意:上半部的类图比较直观,但并非最合适的类图。“丧偶”、“离婚”只是衍生的知识,本质的知识是两个人的婚姻关系结束或某人死亡。例如,“张三丧偶”是从“李四死亡”以及“当前时间张三和李四存在婚姻关系”这两个事实衍生的,下半部是更本质的类图。)

因此,还是尽量用属性演变得来的名字,例如“有离婚史”、“有丧偶史”。

(3)把状态叫做“不可结婚”、“可结婚”可以吗?

答:

不好。

首先,如果某个状态接受“结婚”事件,自然就是可结婚,如果状态不接受“结婚”事件,那就是不可结婚,不需要在状态名称上再刷一遍(此处也可以作为领域驱动设计伪创新发掘的创新点)。

其次,你把“结婚”这个事件拎出来搞一个“可**”,那“离婚”、“丧偶”不也可以拎出来“可离婚”、“可丧偶”吗?凭什么只拎“结婚”,难道因为“结婚”比较喜庆,另外两个比较丧气?

那就是武汉这位最美红娘了:

[答疑]UML状态机-再说转腚、凤姐和武汉“最美红娘”_第9张图片

你可能感兴趣的:(分析,uml,MBSE,SysML,软件工程,系统工程,DDD,领域驱动设计)