首页 > 其他分享 >DDD事件风暴 - 业务场景分析

DDD事件风暴 - 业务场景分析

时间:2022-12-23 06:55:05浏览次数:55  
标签:请假 场景 用户 业务 请假单 事件 审批 风暴 DDD

DDD的事件风暴第二个阶段“业务场景分析”是从用户视角出发的,根据业务流程或用户旅程,采用用例和场景分析,探索领域中的典型场景,找出领域事件实体命令等领域对象,支撑领域建模。

事件风暴参与者要尽可能地遍历所有业务细节,充分发表意见,不要遗漏业务要点

本阶段的

图例说明

我们用下面四种帖纸来代表不同类型的信息。

事件(Event)

事件是对已发生事实的陈述(比如:股票已购买、请假单已创建...)。换句话说,一个事件集是指系统中已经发生的一些历史记录。事件一般用过去时态来表达。

一般来说,事件风暴会议启动后,参与者都开始往墙上贴事件 —— 任何有趣的,值得讨论的事件:

事件是一个系统天然的基础,因为它们是业务流程最贴切的表示法,能围绕它们和主题专家展开讨论。

命令(Command)

命令通常是一个或多个事件序列的触发器。事件代表着过去不可改变的事实,而命令用来表达让事情在未来发生的意图。

命令可以被驳回。比如,由于客户投资组合中没有足够的股份,导致“卖出股票”这个命令被驳回,

  • 命令通常用现在时态来表示,而事件总是过去时态。
  • Event 代表事实,是不可逆的,这个从一般命名也可以看出来:OrderCanceledEvent;
  • Command 代表意向,还未发生,命名一般是:CancelOrderCommand;
  • 某Command执行的结果可能导致若干Event的发布;

业务流 和 补充说明

业务流也就是业务流程,是我们串起整个业务的主线,这里的目的是为了要尽可能地遍历所有业务细节不要遗漏业务要点

补充信息主要用来说明注意事项,比如外部依赖等。

请假业务场景分析

以请假和审批为例:

  • 请假的用户(角色)为请假人,
  • 审批的用户(角色)为审批人。

作为请假人,其用户旅程为:

  1. 登录系统,从鉴权中心获取请假人信息和权限数据,完成登录认证;
  2. 创建请假单:在请假页面选择请假类型、起始时间,录入请假休息,保存请假单;
  3. 修改请假单:查询请假单,修改、保存;
  4. 提交审批:将创建的请假单提交审批,系统会获取审批规则,并根据审批规则,从人员组织关系中获取审批人,给请假单分配审批人。

作为审批人,其用户旅程为:

  1. 登录系统,从鉴权中心获取请假人信息和权限数据,完成登录认证;
  2. 获取请假单:获取审批人名下的请假单;
  3. 审批:填写审批意见,批准或者拒绝;
  4. 逐级审批:审批人批准请假单后,系统会根据审批规则判断是否需要继续审批;
  5. 完成审批:系统发出领域事件:请假单已审批通过,后续会进一步执行邮件通知请假人、将请假数据发送到考勤的操作。

“根据审批规则查询审批人”需要依赖另一个上下文:人员组织关系,它的场景分析如下:

用户中台 业务场景分析

用户中台有这样三个典型的业务场景:

  1. 第一个是系统和岗位设置,设置系统中岗位的菜单权限;
  2. 第二个是用户权限配置,为用户建立账户和密码,设置用户岗位;
  3. 第三个是用户登录系统和权限校验,生成用户登录和操作日志。

我们可以按照业务流程,一步一步搜寻用户业务流程中的关键领域事件,比如岗位已创建,用户已创建等事件。

再找出什么行为会引起这些领域事件,这些行为可能是一个或若干个命令组合在一起产生的,比如创建用户时,第一个命令是从公司HR系统中获取用户信息,第二个命令是根据HR的员工信息在用户中台创建用户,创建完用户后就会产生用户已创建的领域事件。

当然这个领域事件可能会触发下一步的操作,比如发布到邮件系统通知用户已创建,但也可能到此就结束了,你需要根据具体情况来分析是否还有下一步的操作。

组织业务场景分析的技巧

会议时间控制

不可能不限时的寻找,可以用下面的方式来组织会议。

  • 所有的参与人在10分钟内尽可能的写出可能想到的领域事件
  • 时间结束后,参与人把自己的领域事件便签添加到“公屏”上
  • 主持人和所有参与人一起去掉重复的事件,然后对剩下的领域事件标签按照时间线排序

有疑问时标记下,跳过

在遇到有疑惑的事件时,不必长时间阻塞在那里讨论,把它作为标记记下来即可,后续再进行重点优化。可以贴一个比较醒目的便签纸(比如紫色)在事件旁边。

随着我们对业务认识的不断加深,可以随时回顾和总结之前添加的内容,对于有问题的描述进行更正,对于表述不清楚的内容可以进行重写。

事件的粒度?

我们在讨论这个问题之前,首先要思考事件是什么。事件是领域专家关心的业务事件。所以它不能比领域专家关心的业务更细,因为那将毫无意义。

举个例子:如果我们关心的是一个人一天的作息,那我们可能关心的是用户已起床,用户已吃早餐,用户已上班。

但我们不会关心到更细节,比如:用户已睁眼,用户已洗漱,用户已出门,用户已上地铁……

同时,事件粒度也不能太粗,因为太粗粒度的事件不利于寻找领域模型。

比如我们在平台上发一篇文章的业务。如果你只写一个“文章已发布”,那就可能会丢失掉一些比较重要的业务流程。

尝试改成:文章已保存,文章已申请审核,文章已通过审核,文章已审核失败,文章已对外发表,文章已加入分类,文章已推荐……

你会发现,中间多了一个审核的过程,如果不找到这些命令,就很有可能遗漏掉“文章审核单”之类的模型。

对某个事件有歧义

这是好事情,说明你们团队需要讨论了,有时还可以发掘出原本可能没有注意到的业务细节。

但在实施事件风暴的时候,不必刚开始就花太多的时间在上面,阻塞了后面的事件发掘。

而是应该先前面说的那样,用一个醒目的标记记下来,后面再回过头来充分讨论。

或许最开始有歧义的地方,在事件逐渐完善,领域模型定义出来后,就没有歧义了。

一个命令产生多个连锁事件

这个是正常的,一个命令可能会触发一个事件或者多个事件。

也有可能一个事件触发了另一个事件,只需要把它们贴在一起即可。

标签:请假,场景,用户,业务,请假单,事件,审批,风暴,DDD
From: https://www.cnblogs.com/ghj1976/p/ddd-shi-jian-feng-bao--ye-wu-chang-jing-fen-xi.html

相关文章

  • 不同存储资源的应用场景及优缺点介绍
    容器应用应当根据应用系统的特点,综合考虑容器应用对存储类型、存储性能及数据高可用等方面的要求,选择最适合的存储资源类型。常见的存储资源应用场景包括三类:将存储挂载在外......
  • 不同存储资源的应用场景及优缺点介绍
    容器应用应当根据应用系统的特点,综合考虑容器应用对存储类型、存储性能及数据高可用等方面的要求,选择最适合的存储资源类型。常见的存储资源应用场景包括三类:将存储挂载在......
  • 图算法、图数据库在风控场景的应用
    本文首发于DataFunTalk公众号,授权NebulaGraph社区转发。导读:本文将分享图算法在风控中的应用。今天的介绍会围绕下面四点展开:图算法和风控简介图算法在风控的......
  • DDD事件风暴 - 产品愿景阶段
    这是DDD事件风暴的第一个阶段,是对产品顶层价值的设计,使产品目标用户、核心价值、差异化竞争点等信息达成一致,避免产品偏离方向。我们可以用“电梯演讲”这个工具来帮我们......
  • DDD的事件风暴
    事件⻛暴(EventStorming)是一种“自底向上”的设计方法,先关注具体的业务细节,然后通过归纳、聚合、抽象的方法获得整体层面的认知和设计。事件⻛暴的发明⼈是AlbertoBra......
  • 华为云会议,总有一种场景满足你的需求​
    如今远程沟通协作成为企业的高频刚需,但传统的视频会议系统,从专线、整套服务器和专业视讯终端,价格往往在几十万到上百万不等,而且系统复杂,维护成本高,让大多数的中小企业望而却......
  • SRv6的四种部署场景
    SRv6可以应用于单个网络域,如IP骨干网、城域网、移动承载网和数据中心等单自治域网络,也可以应用于端到端网络,如跨域VPN和运营商的运营商。一、IP骨干网中的部署场景SRv6网络......
  • Go语言使用场景 | go语言与其它开源语言比较 | Go WEB框架选型
     一、Go语言使用场景1.关于go语言2007年,受够了C++煎熬的Google首席软件工程师RobPike纠集RobertGriesemer和KenThompson两位牛人,决定创造一种新语言来取代C++,......
  • DDD与云原生时代的微服务拆分
    目录​​一、概念​​​​DDD​​​​云原生​​​​微服务​​​​二、微服务与云原生​​​​三、DDD与微服务​​​​四、微服务拆分步骤​​​​小结​​在服务拆分的时......
  • LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue、ConcurrentLinkedQueue
    在jdk中有许多的队列,队列的使用还是有一些难度的,因为涉及到了并发等概念,现在我们列举一下队列的特点:并发情况下不会有线程安全问题队列都有元素都有添加(生产者端使用)、获取(......