软件流程设计之事件风暴EventStorming

最近新开了一个公众号,有兴趣可以关注一下。时不时就复活去更新一下。
公众号二维码

最近在带几个新员工,新员工是学校刚毕业的,习惯于做一些导师或者师兄师姐们拆解好的任务,有很明确的功能描述,甚至喂饭喂到什么地步呢,输入输出,需求文档,参数类型都规定好了,他只要把逻辑实现一下就行。
但是问题来了,职场不是学校,喂饭喂到这种程度才能做的话,不如我自己写写算了。带人很累,但是我秉着授人以鱼不如授人以渔的想法,想要让他们学会怎么做程序设计。
今天给大家介绍一个能够让软件设计快速入门的方法论,事件风暴。

事件风暴的官方定义:

EventStorming is a flexible workshop format for collaborative exploration of complex business domains.事件风暴是一个处理复杂业务灵活小作坊。

目标:

  • 发掘现有的健康业务线中最有改进价值的地方;
  • 探索新业务模式的可行性;
  • 设想新的服务,为每个参与方带来最好的正向结果;
  • 设计整洁可维护的事件驱动型(Event-Driven)软件,以支持快速发展的业务。

事件风暴中的基本元素:

事件风暴中的基本元素很多,今天先介绍相对独立的系统(即不跟第三方系统交互),在设计流程的时候用到事件风暴中的几个必要元素。

1.事件 Event

指的是可以拆分到最小单元的业务动作。举个例子,“点击按钮”不算一个事件,因为没有任何业务属性,但是“查看账户余额”就可以认为是一个事件。

2.决策行为 Command

指的是导致事件发生的动作。顺着刚刚的例子说,“点击按钮”就是一个决策行为,导致了客户可以“查看账户余额”。

3.角色 User/Actor

指的是发起决策动作的一个参与者,就是对象。再顺着刚刚的例子,谁可以查看余额,很显然就是用户本人。值得注意的是,这里的Actor并不仅仅指生物学上的人类,它的范围涵盖了计算机领域的所有对象,一般包括,用户、信息系统、操作系统等。

了解了以上的几个必要元素之后,我们就有了一个基本的模型,那就是

User Command Event 谁-怎么做-做什么。
在这里插入图片描述
那么流程设计就是基于谁做什么导致什么结果,然后这个结果再驱动下一个人做什么的过程。

使用要点:

1.识别事件

案例:在双十一活动期间,某商家决定对在店内购买商品的客户都免费包邮赠送一本《C++程序设计》。
正常情况下的事件分解应该是。

客户下单,订单完成。
商家赠送书籍《C++程序设计》。
看起来很简单,但是怎么越想越不对,如果客户退货了怎么办呢?这本书也照送吗?
所以中间增加了一个事件,就是订单结束。
还有一个问题,很多客户是知道了这个赠品才买的其他商品,怎么能保证客户知晓自己有一个赠送书籍呢?
所以中间又增加了一个事件,就是订单结束后,通知客户赠品已发出。
……等等等等这样的想法还有很多。
这个识别事件的过程就是“风暴”。事件风暴就是所有的程序参与者(开发、测试、产品、业务、需求)在内的人不断经过唇枪舌剑,最终确认所有事件的过程。

2.根据结果事件倒推上一个事件

继续上面的案例:

客户收到赠品是最后一个事件,它的前提是

商家寄出赠品,它的前提是

订单已完成,它的前提是

客户收到商品,它的前提是

商品已发货,它的前提是

客户已付款,它的前提是

客户已下单。
在这里插入图片描述

2.识别主流事件并标注分支的优先级

首先,刚刚那个案例还是存在缺陷的,有很多问题我们没有考虑到,比如:订单生成了,但是客户取消付款;商品库存不足;赠品库存不足;客户要求退货退款;客户没有主动结束订单;赠品寄丢了。等等。

我们将这些其他的事件都补充到刚刚的流程中:在这里插入图片描述
但是软件的交付是有时间要求的,所以我们需要对所有的事件做优先级区分,以保证开发力量能够快速迭代上线。根据我们之前的分析,很显然正常状态下的完成整个业务流程的优先级是最高的。
在这里插入图片描述
在这个基础上我们就可以根据不同的MVP等级,编写不同开发周期的需求分析文档。

3.识别每一个事件可能导致的不同结果

延续上述案例,主流MVP1的每一个步骤都可能导致不同的结果:

客户提交订单,订单有可能提交失败;

客户支付订单,订单有可能支付失败,客户可能超时支付,客户可能取消订单;

商家发出商品,商品可能库存不足,商品可能丢失物流;

客户收到商品,客户可能没有及时签收,商品可能存在问题,客户可能申请退款,客户可能申请退货;

客户结束订单,客户可能没有收到商品,客户可能没有结束订单,订单可能超时自动关闭;

商家发出赠品,赠品可能没有库存,赠品可能没有及时通知客户,赠品丢失物流信息;

客户收到赠品,赠品可能存在质量问题,赠品可能需要补发,赠品可能没有被及时签收……

将以上所有可能的结果都绘制到流程图中,每一个结果可能会产生新的业务流程,比如退货流程,退款流程,系统自动关闭订单流程等。不同的流程会产生新的事件风暴流程。

最终会变成一个完整的业务流程。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

激光雷达与惯导标定 | Lidar_IMU_Init : 编译

激光雷达与惯导标定:Lidar_IMU_Init 编译 功能包安装安装ceres-solver-2.0.0 (注意安装2.2.0不行,必须要安装2.0.0) LI-Init是一种鲁棒、实时的激光雷达惯性系统初始化方法。该方法可校准激光雷达与IMU之间的时间偏移量和外部参数…

计算机网络之网络层

一、概述 主要任务是实现网络互连,进而实现数据包在各网络之间的传输 1.1网络引入的目的 从7层结构上看,网络层下是数据链路层 从4层结构上看,网络层下面是网络接口层 至少我们看到的网络层下面是以太网 以太网解决了什么问题? 答…

事务对隔离性的原理理解

脏读:两个事务并行,A事务做的一切,B事务就可以立刻知道。不可重复读:一个事务受到另一个事务的影响导致连续的select不统一,RU、RC都会导致。幻读:一般的数据库在可重复读情况的时候,无法屏蔽其…

leetcode刷题日志-70爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示例 2: …

【C++】泛型编程 ⑭ ( 类模板示例 - 数组类模板 | 容器思想 | 自定义类可拷贝 - 深拷贝与浅拷贝 | 自定义类可打印 - 左移运算符重载 )

文章目录 一、容器思想1、自定义类可拷贝 - 深拷贝与浅拷贝2、自定义类可拷贝 - 代码示例3、自定义类可打印 - 左移运算符重载 二、代码示例1、Array.h 头文件2、Array.cpp 代码文件3、Test.cpp 主函数代码文件4、执行结果 一、容器思想 1、自定义类可拷贝 - 深拷贝与浅拷贝 上…

【分布式】分布式事务及其解决方案

目录 一、分布式事务二、分布式事务的解决方案1. 全局事务(1)DTP模型(2) 两阶段提交协议(2PC)原理二阶段提交的缺点 (3)三阶段提交协议(3PC)原理 2. 基于可靠…

计算机视觉项目-人脸识别与检测

😊😊😊欢迎来到本博客😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学…

机器学习---最大似然估计和贝叶斯参数估计

1. 估计 贝叶斯框架下的数据收集,在以下条件下我们可以设计一个可选择的分类器 : P(wi) (先验);P(x | wi) (类条件密度) 但是。我们很少能够完整的得到这些信息! 从一个传统的样本中设计一个分类器: ①先验估计不成问题 ②对类条件密度…

mysql:修改密码的几种方式

背景 当我们 brew install mysql 新安装 mysql 的时候,是没有密码的,我们可以直接通过 mysql -u root 连接上。但是密码还是要设置的,一是为了安全,二是有些数据库软件如 Sequel 连接都是必须要密码的,接下来我们来看…

基于JavaWeb+SSM+Vue校园水电费管理小程序系统的设计和实现

基于JavaWebSSMVue校园水电费管理小程序系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 III Abstract 1 1 系统概述 2 1.1 概述 2 1.2课题意义 3 1.3 主要内容 3…

朋友圈被折叠怎么解决?

最近有客户咨询发的朋友圈老被折叠怎么办,正常发都被折叠。一些朋友在微信做私域的,在朋友圈日常营销是必不可少的,如何避免这种问题和怎么解决呢? 为什么会被折叠? 1.据了解,朋友圈内容折叠功能是主要针对…

Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式

目录 IDEA第一课(熟悉里面内容) 建立连接 -RequestMapping 路由映射 请求 1.传递单个参数​编辑 2.多个参数​编辑 3.传递数组 4.传递一个集合,但是这里我们传递的时候发生了500的错误 简单介绍JSON 回顾Cookie和S…