京东云开发者DDD妙文欣赏(3-4)什么时候厨师是Actor

news2024/10/7 7:49:47

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更新)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1411775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全新PHP短网址生成系统,短链接生成系统,URL缩短器系统源码

PHP短网址系统URL缩短器平台,它使您可以轻松地缩短链接,根据受众群体的位置或平台来定位受众,并为缩短的链接提供分析见解。 系统使用了Laravel框架编写,前后台双语言使用,可以设置多域名,还可以开设套餐等…

架构师之路(十六)计算机网络(传输层)

前置知识(了解):计算机基础。 作为架构师,我们所设计的系统很少为单机系统,因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 既然网络层已经…

Linux服务器配置与管理(第一次实验)

实验目的及具体要求 1.熟悉Ubuntu桌面环境和基本操作 2.熟悉命令语法格式 3.掌握Linux各类命令的使用方法 4.熟悉Linux操作环境 实验仪器、设备和材料 笔记本电脑 软件VMware Workstation 17 Player Ubuntu 64 位操作系统 实验内容、步骤及实验数据记录 (一…

【医学图像隐私保护】联邦学习:密码学 + 机器学习 + 分布式 实现隐私计算,破解医学界数据孤岛的长期难题

联邦学习:密码学 机器学习 分布式 提出背景:数据不出本地,又能合力干大事联邦学习的问题 分布式机器学习:解决大数据量处理的问题横向联邦学习:解决跨多个数据源学习的问题纵向联邦学习:解决数据分散在多…

自动化防DDoS脚本

简介 DDoS (分布式拒绝服务攻击)是一种恶意的网络攻击,旨在通过占用目标系统的资源,使其无法提供正常的服务。在DDoS攻击中,攻击者通常控制大量的被感染的计算机或其他网络设备,同时将它们协调起来向目标系…

第二百八十七回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…

解决 [Vue warn]:Avoid mutating a prop directly 警告

错误信息 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “xxx” 错误原因 所有的 prop 都使得…

Vue开发之proxy代理的配置(附带uniapp代理配置)

vue 1.在vue.config.js中添加 devServer 属性中配置 proxy 属性 module.exports {productionSourceMap: false,publicPath: /,devServer: {port: 8085,proxy: {/api/admin: {target: http://10.58.104.70:6111,changeOrigin: true,pathRewrite: {/api/: /}},/api: {target: …

白酒:品控标准与产品质量的关系

品控标准是确保产品质量的关键要素,它涉及到产品的原料、生产工艺、包装、储存和运输等各个环节。在酿酒行业中,品控标准尤为重要,因为酒的品质与其原材料、生产环境、酿造工艺等密切相关。云仓酒庄的豪迈白酒在品控方面制定了严格的标准&…

中移(苏州)软件技术有限公司面试问题与解答(4)—— virtio所创建的设备1

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(0)—— 面试感悟与问题记录 本文参考以下文章: VirtIO实现原理——PCI基础 VirtIO实现原理——virtblk设备初始化 特此致谢! 本文对…

React复习记录

1、Outlet的作用 <Outlet /> 是一种在 React 路由器中使用的特殊组件&#xff0c;它用于渲染当前路由的子路由。在一些情况下&#xff0c;我们可能只想渲染子路由&#xff0c;而不需要使用上下文传递任何参数。这种情况下&#xff0c;可以直接使用 <Outlet /> 组件…

java servlet果蔬产业监管系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web果蔬产业监管系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…

Maven(上):Maven介绍、安装配置及工程构建

1. Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 Maven就是一个软件&#xff0c;掌握安装、配置、以及基本功能 &#xff…

国密算法:定义、应用与重要性

国密算法是指由中国国家密码管理局发布的密码算法标准&#xff0c;旨在保障国家信息安全。目前&#xff0c;国家密码管理局已发布了一系列国产商用密码标准算法&#xff0c;包括SM1&#xff08;SCB2&#xff09;、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法&#xff08;ZUC)等…

MIT_线性代数笔记:线性代数常用计算公式

目录 1.矩阵的加法和数乘2.矩阵的乘法3.转置 Transposes 相关运算 1.矩阵的加法和数乘 2.矩阵的乘法 1)标准方法&#xff08;行乘以列&#xff09; 矩阵乘法的标准计算方法是通过矩阵 A 第 i 行的行向量和矩阵 B 第 j 列的列向量点积得到 cij。即我们常说的点积&#xff0c;也…

用Excel辅助做数独

做数独游戏的时候&#xff0c;画在纸上很容易弄花眼&#xff0c;所以我考虑用Excel辅助做一个。 界面如下&#xff1a; 按下初始化表格区域按钮&#xff0c;会在所有单元格中填充“123456789”。如下图&#xff1a; 当某个单元格删除得只剩一个数字时&#xff0c;会将同一行、…

安利一款抢票软件堪称“业界良心”,全网好评!

马上就到了春运了&#xff0c;有不少网友反映12306买票太难了。 有粉丝在后台留言问有没有抢票软件&#xff1f; 知名公司开发的抢票软件&#xff0c;需要助力、需要用钱买加速包&#xff0c;这对于需要白嫖的朋友来说无疑是“雪上加霜”&#xff01; 这里从解决实际问题的角度…

RocketMQ源码安装

RocketMQ源码安装 1.官方下载地址 http://rocketmq.apache.org/dowloading/releases/ 2.环境要求 1.Linux64位系统 2.JDK1.8(64位) 3.Maven 3.2.x以上 3.IntelliJ IDEA导入 导入后执行Maven命令install mvn install -Dmaven.test.skiptrue 4.调试RocketMQ源码 4.1启动…

5JS语句

表达式在JavaScript中是短语&#xff0c;那么语句&#xff08;statement&#xff09;就是JavaScript整句或命令。 表达式计算出一个值&#xff0c;但语句用来执行以使某件事发生。诸如赋值和函数调用这些有副作用的表达式&#xff0c;是可以作为单独的语句的&#xff0c;这种把…

gitlab设置/修改克隆clone地址端口

最近由于公司要停测试库云服务器? 什么?要停测试库服务器??? 是的! 你没听错。 真是醉了,多大的集团,为了省钱,也真是拼了, 作为开发人员,没有测试服务器,犹如断臂之人。 所以,在之前搭建环境的时候都没有写文档,今天算是弥补上,以后都可以作为参考了, …