DDD领域驱动设计批评文集
做强化自测题获得“软件方法建模师”称号
《软件方法》各章合集
京东云开发者DDD妙文欣赏(1-2)报菜名和化繁为简的创新>>
图8 《餐厅》中的“用例图”
(01)
原文
用例图
赏析
揉一揉眼睛仔细看,确实写着“用例图”,不是领域驱动设计革命性创新的蛋蛋图。
那么,我们就按用例图的知识来赏析。
(02)
原文
理清谁在做什么
厨师→做菜
赏析
前面“统一语言”的脑图里说“做饭”,这里变成了“做菜”?我又揉一揉眼睛,后面紧跟着的“买菜”、“洗菜”和脑图中的一样,应该说的是一个东西。也许在强调统一语言的同时,又引入了量子力学加成吧。
**********
你猜,用例为啥有个“用(use)”字?
因为它说的并不是“A做B”,而是“A用X来做B”,或者“X向A提供了B的服务”。
这里的焦点是X,用例实质上是描述X作为一个整体对外提供哪些价值。
图9的左右两侧的图形表达都可以,但都要说清楚研究对象X,否则谈论用例是没有意义的。
图9 X的用例图
X可以是一个系统。此时,A就是X外面的另一个系统,A称为系统X的系统执行者(Actor),B称为系统X为系统执行者A提供的一个系统用例。这样的用例表达了X系统的需求。
*系统可以是人,也可以是非人智能系统或时间。当然,也可以把时间看作特殊的非人智能系统。
X也可以是一个组织。此时,A就是X外面的另一个组织,A称为组织X的业务执行者,B称为组织X为业务执行者A提供的一个业务用例。
*组织可以是正式组织,如企业、党政军单位、事业单位、社会团体,也可以是非正式组织,如人群、家庭、正式组织中的部门或团队。
**********
图8的“用例图”,研究对象X是什么?也就是说,是描述什么东西的用例?
这又回到了之前的赏析说到的“薛定谔的餐厅”,说“设计餐厅”,这个“餐厅”到底指什么?不说清楚这一点,这个“用例图”是没有意义的,除非画的是“领域驱动设计革命性创新的蛋蛋图”。
★如果“餐厅”指的是“餐饮企业”
“餐饮企业”是组织。图8中的三个小人“厨师”、“刀工”和“采购员”此时在“餐饮企业”内,可以看作“餐饮企业”的人肉零件,或者称为“餐饮企业”的业务工人。它们不是“餐饮企业”的Actor,“厨师→做菜”也不是“餐饮企业”的用例。
或者这样说,“餐饮企业”之所以存在,不是为了解决厨师的就业问题,让厨师有个地方做菜来获得薪水。老板巴不得不用请那么多厨师,搞一个外星黑科技烹调机来取代他们。顾客也并不在意菜是谁做的,只要味道好、干净、卫生、有营养、价格公道,没准外星黑科技烹调机的分子料理更受顾客欢迎。
“餐饮企业”之所以存在,是因为一些人群或机构需要用餐,但又不想自己完成购买食材、烹调、布置用餐场所、餐后清理的工作,于是由“餐饮企业”提供这个价值,这个价值可以称为“用餐”。
“餐饮企业”的用例图可能如图10。图中用“食客”替换了原文中的“顾客”。实际工作中还需要定位目标食客是哪种类型的食客,本文暂不考虑这个问题。
图10 “餐饮企业”的用例图
图10代表了“餐饮企业”的价值,非常稳定。时光倒流三百年,图10也是成立的,往后一百年,也应该是成立的……吧?
容易变的是用例的实现,即“餐饮企业”的业务流程。图11是某餐饮企业“***餐厅”于2018年的业务流程片段。可以看到,“食客扫码点餐”等场景尚未出现在当时的业务流程中。
图11 用序列图表达某餐饮企业“***餐厅”于2018年的业务流程片段
“厨师”作为业务工人出现在图11中,但和“取号系统”、“餐馆管理信息系统”等没有交互——虽然“餐馆管理信息系统”有一条虚线指向“厨师”。
也就是说,无论是以“餐饮企业”为研究对象,还是以“取号系统”、“餐馆管理信息系统”为研究对象,“厨师”都不是Actor。当然,“厨师→做菜”也不是用例。
图12 厨师不是Actor
★什么情况下,厨师会是Actor?
一种情况是,研究对象是一个组织,厨师作为组织外的一个人群和该组织交互。
例如,以“餐饮协会技能评定中心”为研究对象,“厨师→考厨师证”就是用例。
图13 厨师作为执行者,例1
思考题:
多年前,电子支付还没有普及。有一家较大的餐饮企业,发薪水都是发现金。假设我们去观察,可能会看到一名厨师到财务部去领薪水。请问“厨师→领薪水”是“财务部”的用例吗?
另一种情况是,研究对象是一个系统,厨师作为系统外的一个系统和该系统交互。
例如,以封装了一些烹调智慧的“智能烹调机”为研究对象,“厨师→做菜”就是用例。
图14 厨师作为执行者,例2
思考题:
假设研究对象是普通的炒锅,请问“厨师→做菜”是炒锅的用例吗?
★如果“餐厅”指的是“虚拟餐厅”
例如做一款游戏,把现实中的一切人、物、事都搬进去。
以这样的系统为研究对象,Actor就是游戏玩家。
如果这个“虚拟餐厅”厉害到黑客帝国中Matrix的地步,那Actor就只有时间了。
如何选择UMLChina服务
UMLChina公众号精选(20240123更新)