30-26 之 DDD 战略设计 2 - 实作方法之 Event Storm

事件风暴 Event Storm

  • 事件风暴 : 理解、访谈需求
    • 目的 : 将商业流程视觉化,找出核心价值、风险与机会
    • 成员 : 引导帅、领域专家、利害关系人
    • 三个阶段
      • Big Picture : 看到全貌
        • 便利贴
          • 橘色便利贴 :
            • domain event 商业流程的所有发生的事情
            • 过去式动式,过去发生的事情 ( 下单会有很多意思,如果用已下单,会发生,就只有一个意思了 )
          • 红色便利贴 : 代表冲突,包含不清楚、不确定、有争议的事情
          • 黄色 : 使用者 ( user/actor )
          • 浅紫色 : System
        • Step 1. 混沌探索 ( 因为每个可能想到的事件有的会重复,或是打架,又或是用不同字,来说明同一个事情,因为会将这些放到一群 )
        • Step 2. 执行时间
          • Pivotal Event : 关键事件,代表不同业务场景阶段之间的转换 ( 用一个纸交带, )
          • Swimlanes : 平行的业务流程
        • Step 3. People & System : 将人与系统丢进去图里
        • Step 4. Explicit Walkthrough : 以讲故事的方法,说明这整个 flow 的流程与事情
      • Process Modeling : 商业流程的建模,为了可以理解整个流程
        • 便利贴
          • 蓝色 : command
          • 绿色 : read model : 当使用者看到、感受,然後会触发更多的事情。 ( UI/UX 设计 )
          • 紫色 : policy : 一定规则与限制
        • 为『 domain event 』加上 user → command
        • 思考 read model,就是当用户看到或知道什麽後,会改变 command 的决策。
        • 思考 policy : 有没有什麽限制或规则。
        • 过程中可以使用 user story 来讨论。
      • Soft Design : 软件设计
        • Aggregate : 把概念相同的东西放在一起,并且记好 aggregate 就像是 state machine,它有很多的状态,而这些状态对应到 domain event。
        • 找出 Bounded Context : 找出软件的边界

https://ithelp.ithome.com.tw/upload/images/20211011/200893586zvuUs2YpM.png

范例

使用者可以看到画面上有不同的产品,产品包含影音课程、文章、直播,并且可以购买与观看,并且购买完成後,并且会寄信给购买者,还会分润给老师们。

流程 1. Big Picture : 看到全貌

  • Step 1. 混沌探索
    • Domain event ( 假设你在 domain 完成後,已发生的事情 ) ( 橘色便利贴 )
      • 已购买产品
      • 已浏览产品
      • 已学习产品
      • 已收到分润
      • 已收到购买完成信
  • Step 2. 重新整理,并且确保时间顺序
    • 顺序与平行为 :
      • 平行 A : 浏览 → 购买 → 学习产品
      • 平行 B : → 分润
      • 平行 C : → 收到完成信
    • Pivotal Event : 购买
    • 问题 ( 红色便利贴 )
      • 购买产品有没有限额 ?
      • 只要有看过就算已学习产品吗 ?
      • 分润的公式 ?
  • Step 3. 加上 user ( 黄色便利贴 ) 与 system ( 浅紫色便利贴 )
    • 一般使用者 → 透过 API → 已购买产品
    • 一般使用者 → 透过前台画面 → 已浏览产品
    • 购买产品使用者 → 透过前台画面 → 已学习产品
    • 老师 → 排程定期付钱 → 已收到分润
    • 购买产品使用者 → 透过 API 与 Mail Service → 已收到购买完成信
  • Step 4. 讲故事

流程 2 : Process Modeling : 商业流程的建模

  • Step 1. 为 domain event 加上 command ( 蓝色便利贴 )
    • 一般使用者 → 将选择商品结帐 ( command ) → 透过 API → 已购买产品
    • 一般使用者 → 选择产品总览页面 ( command ) → 透过前台画面 → 已浏览产品
    • 购买产品使用者 → 选择产品进行观看影片 ( command ) → 透过前台画面 → 已学习产品
    • 老师 → 一般使用者购买该老师产品 → 排程定期付钱 → 已收到分润
    • 购买产品使用者 → 购买产品,并且进行付款 ( command ) → 透过 API 与 Mail Service → 已收到购买完成信
  • Step 2. 思考有没有什麽事情 real model,会改变 command 的决定。 ( 绿色便利贴 )
    • 商品有没有折扣
    • 商品有没有合购
    • 产品是否全部看过
    • 商品有没有 Coupon
  • Step 3. 思考 policy 有没有什麽限制或规则。( 深紫色便利贴 )
    • 商品有没有限额
    • 商品没有规则,每个用户只能买几次 ?

流程 3 : Soft Design : 软件设计

  • Step 1. 提取 Enties。
  • Step 2. 建立 Aggregate。
  • Step 3. 画定 Bounded Context

这一步我发现要先去理解完 『 战术层级 』的东西以後,会比较清楚,等说完战行层级时,在来回补。难怪有些书籍会将这个地方拉到很後面才说明。

参考


<<:  Day 26.

>>:  Day 28 | 状态管理-从官方范例来看如何使用BLoC

Python 演算法 Day 1 - 程序基础 & 简介

Chap.O 程序基础 & 简介: Part 1. 常用於演算法的开发程序,有以下几种: 1...

Watch

今天要介绍的是watch属性 Watch他跟computed最大的不同是他没有cache的机制,那w...

Day01_老太太的前言~落落长~XD"

重回职场之後,常常听到内稽跟外稽,一直搞不清楚到底是要鸡稽什麽XD"所以就自费去上课啦~ ...

javasScript 进阶笔记二 (object.prototype.call)

Object.prototype.call(变数)可以更详细地找出变数的型态 console.log...

Annotation 介绍

Annotation 很常写 Java 或是 Kotlin 的朋友对 annotation 大概不陌...