学习与尝试 --> 事件风暴
事件风暴
1. 基础概念

术语
- 执行者 -----> 是指执行的角色,系统的主体,是导致系统状态变化的触发源
- 人员,系统的用户,操作人员等
- 系统,系统本身执行的,或者调度的,自动触发的 ,第三方系统
- 定时任务,定时的触发任务
- 命令 -----> 是执行者发起的操作,构成要件是执行者的行为
- 是某个场景中领域事件的触发动作,对应一个用例
- 领域对象 -----> 是对对象,人或者系统的信息表示,它通过较为简单的信息结构来代表我们需要理解的复杂事务或系统
- 创建订单,修改订单 ,删除订单等 ,领域对象:订单
- 领域事件 -----> 是和领域相关的事情,实在业务上真实发生的事实,这些事件对系统会产生关键影响,是观察业务系统变化的关键点,领域事件一般是领域专家关心的,一般已动词的过去式表示,表示已发生什么事件,是过去已经发生过的事实
- 识别领域事件的线索
- 是否产生了某种数据
- 系统状态是否发生变化,无论这种状态存放到数据库还是内存
- 是否对外发送了某些消息
- 识别领域事件的线索
- 读模型 -----> 为了达到一个目的,需要在系统中读出一些数据
- 读模型来源于领域对象,展现的形式不一样,一个读模型中可能包含多个领域对象
2. 事件风暴工作坊实践流程
- 产品愿景,识别软件价值和定位,进行业务的导入,团队共识业务需求信息
- 初步进行领域划分,识别出核心域,分而治之 ,对问题域的初步划分,分解问题
- 事件风暴,观察业务系统变化的关键点,找出系统状态的变化规律
- 命令风暴,找出系统状态的触发者和行为
- 寻找模型,根据领域名词,设别领域对象,识别对象之间的关系,设计模型
- 限界上下文划分,分解问题 ,战略规划
- 规范化的输出,已团队共识的模型或者UML输出等
3. 步骤
共识白板中的图例,各自表示的是什么

从一个初步划分的领域开始 ,按照时间轴,从左到右的,写出事件(对时间的顺序要求不是很高,尽量按照时间的先后顺序识别)
识别命令 ,和 执行者 ,并明确执行者的角色,比如,第三方系统,系统操作人员,定时任务
识别读模型
根据业务识别出来的命令,事件,找出具有代表性的名词,建立初步的模型,并整理分类
识别模型之间的关系,画出领域分析模型
根据分析模型,细化模型,设计出领域设计模型,并用uml展示
根据设计模型 设计 聚合,实体,值对象,细化模型
划分限界上下文 ,规范文档输出
业务需求
愿景和目标,统一认识,对于目标的共识
对于 :精装管理业务流程的业务人员(销售,订单,财务)
他们想 :更好的管理客户,项目,订单,以及更快的协作,完成订单,跟踪订单
这个 :精装订单系统
是一个 :内部管理系统
它可以 :通过对客户,项目,订单的在线化管理,提升业务方的协作效率,更好的跟踪 客户 和订单的情况
不同于 : OA管理系统
它的优势是 :结合业务的实际运行情况,基于定制化的管理系统,提升效率
1. 需求描述
销售人员 登录APP,如果没有账号则注册账号,登录成功后,可以在系统上录入客户的基本信息,根据客户的房屋信息创建项目,一个客户可以创建一个或者多个项目,销售人员根据客户的意向情况,创建订单,收取意向金,收取的意向金需要财务进行确认,并记录审核的情况, 财务确认后,订单专员可以看到订单列表,审核订单信息,审核未通过,则通知销售人员原因
订单专员可以给订单绑定合同,如果该客户下没有合同,可以为客户创建合同,并绑定,有合同,就直接绑定合同号,绑定的合同号会流转到下游的系统中,订单专员可以填写排期单信息,确定订单没有问题后,可以做订单下达 ,当订单的生命周期完结后,订单专员可以完成订单 ,订单中途出现意外情况 ,可以作废订单
订单状态机:
- 订单已创建 ------> 订单创建的初始状态
- 订单已生成合同号 ------> 订单绑定合同号成功
- 订单已下达 ------> 订单下达成功
- 订单已完成 ------> 订单完成了
- 订单已废弃 ------> 比如客户不想在公司做了 等情况 或者 没有用的订单不用跟踪了,废弃订单
2. 规则
- 意向金:向客户收取的定金 ,可以任意的填写 ,至少收取1千以上
- 财务审核确认,线上支付的不需要财务确认,现金需要财务进行确认
- 合同号生成规则:Gr + 年月日时分秒
- 合同号必须绑定 ,不绑定不能做订单下达
- 排期单必须填写,不填写不能做点单下达
- 用户名必须唯一,必须填写电话号码 和邮箱,并验证 ,密码长度不能低于6位
3. 术语
- 项目:在家装行业,项目的基本信息,一般就是客户的房屋信息,把房屋信息当作项目信息来管理
- 合同号:合同的标识
- 下游系统,另外一个服务或者第三方的系统
4. 干系人
销售 ,客户 ,订单专员 ,财务人员

分析
- 销售是支持者,录入和收集客户的基本信息应该要尽量完善,这样有利于设计师的设计和报价,面向的是客户,挖掘更多的客户信息,有利于签单
- 需要对客户进行分层,不同的客户,尽量匹配比较适合的设计师和销售
- 财务人员审核的周期控制等
- 订单专员审核的步骤可能很繁琐,需要考虑他的痛点以及效率
5. 流程图

6. 领域分析模型


参考资料
感谢各位老师的输出整理
- 公众号:作者:少个分号,公众号名称:DDD和微服务, https://mp.weixin.qq.com/s/3Ef7jzetIb7r_abH-i4Z8g
- 51CTO 课程 ,领域驱动设计课程 ---> 事件风暴
- 解构领域驱动设计 ---> 事件风暴
学习与尝试 --> 事件风暴的更多相关文章
- 从零开始学习jQuery (五) 事件与事件对象
本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...
- JavaScript学习06 JS事件对象
JavaScript学习06 JS事件对象 事件对象:当事件发生时,浏览器自动建立该对象,并包含该事件的类型.鼠标坐标等. 事件对象的属性:格式:event.属性. 一些说明: event代表事件的状 ...
- asp.net学习之GridView事件、GridViewRow对象
原文:asp.net学习之GridView事件.GridViewRow对象 1. GridView控件的事件 GridView有很多事件,事件可以定制控件的外观或者行为.事件分为三类 1.1 ...
- 学习 JS滚轮事件(mousewheel/DOMMouseScroll)
学习 JS滚轮事件(mousewheel/DOMMouseScroll) 1-1 滚轮事件兼容性的差异 IE,chrome,safari 浏览器都使用 onmousewheel, 只有firefo ...
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
学习笔记---Javascript事件Event.IE浏览器下的拖拽效果 1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...
- JavaScript高级程序设计学习笔记之事件
1.事件流 事件流描述的是从页面中接收事件的顺序. 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播 ...
- vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结
vue—你必须知道的 目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...
- Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>
Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现 ...
- 学习jQuery的事件dblclick
Insus.NET一直以来都是asp.net的开发的,少使用javascript.现在学习asp.net mvc了,jQuery是一个必须掌握的客户端语言. 不用急,慢慢来.一步一步.这篇练习jQue ...
随机推荐
- python之数据类型的内置方法(str, list)
目录 字符串的内置方法 移除首尾指定字符 字母大小写相关操作 判断字符串的开头或结尾是否是指定字符 字符串特殊的输出方法 拼接字符串 替换指定字符 判断是否是纯数字 查找指定字符对应的索引值 文本位置 ...
- lnav-日志查看器
lnav是一个基于控制台的高级lnav是一个基于控制台的高级日志文件查看器(浏览器). lnav支持日志高亮显示内容以及查看压缩的日志文件,而且它可以使用较小的内存实时查看较大的日志文件.日志文件查看 ...
- Linux系统执行命令方法
现在我们无论是工作中还是学习中很多情况下用到Linux系统,当我们需要在C#代码中调用类似与cmd窗口执行命令时候,就需要用到此方法 public static Process CommitComma ...
- JOISC2020 题解
Day1T1 建筑装饰4 题目链接:Day1T1 建筑装饰4 Solution 我们先考虑朴素的\(dp\)方法: 设\(dp_{i,j,k}\)表示前\(i\)个数中,选了\(j\)个\(B\)数组 ...
- vue组件data函数
vue组件data通常定义为一个函数并return一个对象,对象中定义的就是组件数据,当然定义数据还有props.computed等方式. data如果直接定义为对象data: {message: ' ...
- c++ 超大整数除法 高精度除法
c++ 超大整数除法 高精度除法 解题思路 计算a/b,其中a为大整数,b为普通整数,商为c,余数为r. 根据手算除法的规则,上一步的余数记为r,则本次计算的被除数为t=r*10+被除数的本位数值a[ ...
- 我所使用的生产 Java 17 启动参数
JVM 参数升级提示工具:jacoline.dev/inspect JVM 参数词典:chriswhocodes.com Revolut(英国支付巨头)升级 Java 17 实战:https://ww ...
- JuiceFS V1.0 RC1 发布,大幅优化 dump/load 命令性能, 深度用户不容错过
各位社区的伙伴, JuiceFS v1.0 RC1 今天正式发布了!这个版本中,最值得关注的是对元数据迁移备份工具 dump/load 的优化. 这个优化需求来自于某个社区重度用户,这个用户在将亿级数 ...
- 用QT制作3D点云显示器——QtDataVisualization
因为QT的三维显示模块QtDataVisualization已经对个人开发免费开放了,所以在制作点云,地图,表格之类的东西的时候,其实我们都不需要使用QtCharts或者QOpenGL模块了.直接使用 ...
- Mybatis架构原理(二)-二级缓存源码剖析
Mybatis架构原理(二)-二级缓存源码剖析 二级缓存构建在一级缓存之上,在收到查询请求时,Mybatis首先会查询二级缓存,若二级缓存没有命中,再去查询一级缓存,一级缓存没有,在查询数据库; 二级 ...