DDD摸鱼套路示例一[《软件方法》节选]

2022-05-27 14:19:00 浏览数 (1)

图8-17摘自2017年出版的某本名字中带有“Domain-Driven Design”的书,我们来挤一挤这张图里面的水分。

图8-17 摘自2017年出版的某本名字中带有“Domain-Driven Design”的书

首先,我们分析一下图8-17中各个元素的词性,如图8-18。图形的边上流动的“事件”实际上是“事件记录”或“事件信息”,是“数据”(名词)。

图8-18 图中各元素的词性

咦?这不就是UML的活动图吗?直接用活动图表达不是更省事,干嘛非得自己“发明”一套?

我们用UML活动图“复刻”一下图8-17,得到图8-19。

图8-19 用活动图“复刻”图8-17

注意,“Workflow”、“event”、“command”这几个词,作者有的大写开头,有的小写开头,可能是为了通过差异化保持百花齐放的“创新”感吧。

借助UML的语义,“Workflow”可以用活动表示,“event”可以用输出针脚表示,“command”可以用输入针脚表示,这样,“Workflow”、“event”、“command”等后缀就可以删掉了,得到图8-20。

图8-20 删掉后缀

接下来再看“queue”,意思是事件通过一个队列传递(目的是解耦发送和接收),这个做法适用于各种不同核心域的系统,和“Place Order”、“Ship Order”所在的下单配送并不直接相关。把这个知识混进来,结果必然是废话刷工作量,如图8-21。

图8-21 批量刷queue

把非核心域知识“queue”删去,得到图8-22。

图8-22 删去非核心域知识

我们再观察图8-22,发现原来它在玩颠来倒去的文字游戏。用三个词:Place、Ship、Order,再加一个横杠符号“-”,换着花样组合,刷出了一批工作量。

组合技巧一:动词-名词 “Workflow”,放在活动(结点)处。得到“Place-Order Workflow”和“Ship-Order Workflow”。

组合技巧二:名词-动词ing,放在泳道处。得到Order-Taking和Shipping。注意,该图作者在此处做了“创新”——换词和删词,不用Order-Placing,而是用Order-Taking(换词),不用Order-Shipping,而是用Shipping(删词),这样看起来就有了“新意”,不太像刷工作量了。

*“换词”也是许多敏捷和DDD“发明家”的常用技巧。*

组合技巧三:名词动词ed(注意,此处没有“-”了,又有了“新意”) “event”,放在活动的输出针脚处。得到“OrderPlaced event”。

组合技巧四:动词名词(注意,此处没有“-”了,又有了“新意”) “command”,,放在活动的输入针脚处。得到“ShipOrder command”。

剥去各种包装后,我们可以把这张图简化为图8-23。

图8-23 图8-17的终极简化

然后这样约定:

约定1:必要时可以按照以上归纳的四个组合技巧刷工作量。

约定2:通过队列传递事件。

这两条约定可以应用于各个领域。我们还可以进一步“创新”,给这两条约定起一个高大上的名字,例如“分布式区块链云计算智能大数据智能平台敏捷领域驱动设计芜湖起飞架构”,最好找网红老外起名,然后出口转内销。

了解了这个套路,我们就可以熟练地摸鱼了。

首先,拍脑袋“功能分解”,得到类似图8-23;然后,按照套路刷工作量,把图8-23刷成图8-17。

我们以核酸检测为例,按照以上技巧演变看看:

图8-24 按照套路刷工作量示例

0 人点赞