手把手教你落地 DDD
钟敬
Thoughtworks 首席咨询师、数字化转型与运营团队 DDD 负责人
19697 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
AIGC特别策划 (2讲)
结束语&结课测试 (2讲)
手把手教你落地 DDD
15
15
1.0x
00:00/00:00
登录|注册

04|事件风暴(下):事件风暴还有哪些诀窍?

你好,我是钟敬。
上节课我们完成了事件风暴的第一步,识别领域事件。
领域事件表示的是每个业务步骤的结果。那么我们再往深想一步,到底是什么人,执行了什么操作才会造成这种结果的呢?另外,识别行为需求以后,又该怎么进一步导出领域模型呢?
为了解决这些问题,这节课里,我们来一起完成事件风暴的另外两步,识别命令和识别领域名词。
把事件风暴的三步都搞清楚后,我们再来归纳一下事件风暴的作用以及实操时候的一些常见的问题。

事件风暴第二步:识别命令

现在,我们开始进行第二步,识别命令。
所谓命令(command),就是引发领域事件的操作,我们可以通过分析领域事件得到。除了识别出命令本身以外,我们通常还要识别出谁执行的命令,以及为了执行命令我们要查询出什么数据。
比如说,对于“合同已签订”这个事件,对应的命令就是“签订合同”。这里,我们在水蓝色的便利贴上写出命令,然后贴在对应的领域事件上方。如下图:
那么“签订合同”这个操作是什么人执行的呢?需求里说是“销售人员”。这里的销售人员术语上叫做“执行者”,英文是 actor。我们把执行者写在小一点的粉色便利贴上,贴在命令上方,如下图:
为了表示执行者是人,这里还在便利贴上画了一个小人儿。之所以这样,是因为有时执行者还可以是系统,可以在便利贴上画一个屏幕的图像表示系统执行者。像下图这样:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

事件风暴是一种协作方法,旨在捕获行为需求、消化领域知识、形成统一语言。文章介绍了事件风暴的三个步骤:识别领域事件、识别命令和识别领域名词。在识别命令时,需要分析引发领域事件的操作,并识别执行者和查询数据。而在识别领域名词时,需要找到与命令、领域事件、执行者、查询数据相关的名词性概念。事件风暴的作用包括对领域事件、命令、执行者和查询数据的影响,以及识别领域名词的重要性。通过事件风暴,可以为领域建模提供基础,并在实现层面进行细化和验证。文章还讨论了事件风暴的常见问题,如是否列出所有的领域事件和命令、领域事件的时间顺序、步骤的颗粒度等。此外,文章提出了思考题,要求读者比较事件风暴与用例分析、用户故事等方法的优缺点,以及如何借鉴事件风暴的思路为现有的方法添加协作和统一语言的实践。整体而言,事件风暴是一种有益的需求捕获方法,适用于协作、统一语言不明确的项目,但并非适用于所有项目,读者可以通过对比不同方法的优缺点来选择适合自己项目的需求捕获方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手教你落地 DDD》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(26)

  • 最新
  • 精选
  • escray
    置顶
    这里是四色建模法么? 识别领域事件:场景已创建、策略已创建、任务已创建、装备已选择、目标已标定、玩家已选定(红蓝白) 识别命令:创建场景、创建任务、选择目标、设置毁伤、创建装备、创建想定、创建兵力 识别领域名词:场景、任务、装备、模型、目标 对于思考题: 之前接触过用户故事,感觉用户故事可以把系统的功能串联在一起,更加场景化一些;而事件风暴感觉有点类似于头脑风暴的过程,相对发散一些。比较好的方法可能是先采用事件风暴发散,找到足够多的领域事件,然后使用用例分析或者用户故事将领域时间串联在一起。 如果借鉴事件风暴的思路,那么可能首先需要和业务人员同步一下对于业务中各个概念的定义,形成一个团队内部的术语表。曾经在业务讨论中,出现过多次业务术语不一致的情况。从这个角度来说,事件风暴其实也是一次很好的统一语言的方式。

    作者回复: 不是四色建模。四色建模是通过“时间性实体”“人、地、物实体”“角色实体”和“描述性实体”来建模,有时间再讲讲吧。 你已经把你的游戏软件的事件风暴做出来了,这个要赞一下 事件风暴和用户故事的结合,是一个可行的思路。

    2022-12-20归属地:广东
    2
    3
  • 超斌hello
    https://www.processon.com/view/link/639920d07d9c0866853d9d91 试验了一下,技术和业务都听得懂了

    作者回复: 非常棒

    2022-12-14归属地:广东
    3
    38
  • Jxin
    1.用例和用户故事更独立细致,是垂直视角对需求的提炼。产物更详细,耗时更长; 事件风暴则比较像水平视角对需求的提炼,重心在快速了解核心业务,识别核心领域名词,粒度更粗,但广度更广,耗时相对短很多。主要也是为后续沟通的开展建立基础。 如果领域名词比较多,且关系复杂,就很有必要在项目前期做一轮事件风暴,拉齐基础认知。 2.事件风暴会去识别规则吗? 我一般不做,规则在后续,通过用户故事来补齐。主要是事件风暴时间线在前期,对规则容易陷入细节,不好把握会议节奏。所以更多的是仅串主流程,识别核心领域名词。 3.事件风暴仅罗列“主流程”吗?我一般不限制,因为在开事件风暴的时候,我脑子里的“主流程”大概率只是一厢情愿。我们都知道有隐式概念,隐式,表达的是知识归宿的特殊性。可能只有圈内人懂,可能只有那么几个人甚至一个人脑子里才有。隐式概念的显式化靠的是业务专家几年几十年的积累,而不是一场事件风暴。而一厢情愿的“主流程”容易漏掉这些关键概念,所以我一般是简单引导 + 不断追问是否有补充,尽量收集信息。后续自己过滤一遍,然后与专家再碰,达成一致。 4.记录事件风暴时,带命令和执行者吗? 我不带,一方面时间不够(时间问题可以通过工作坊形式的调整来满足),另一方面给自己做后续分析时埋思考的机会。只要事后补执行者和命令,就一定会有模糊的点,这些都是展开思考和后续沟通对齐的点。

    作者回复: 看来您已经实践过一段时间,形成了自己的套路

    2022-12-26归属地:广东
    31
  • Jaising
    这样看来事件风暴抓准了企业软件开发中协作困难这个痛点,以事件为核心允许不同背景的利益相关方展开对话,并超越各自的专业背景界限,借助白板便利贴重视头脑风暴的可视化,尽可能让所有参与者充分咀嚼领域知识,从而深刻高效地挖掘与传递业务知识,形成业务全景图,减少信息孤岛等偏差存在,有效降低复杂软件的需求分析与传递成本。 做了个2000字小笔记,对事件风暴的粗浅认知:https://juejin.cn/post/7182111319967924282

    作者回复: 您这篇博客参考了几个不同来源的资料,理解也精到 👍🏻

    2022-12-28归属地:广东
    3
    5
  • 郭嵩阳
    事件风暴这些产物要体现在设计文档上吗?应该体现在哪部分?大部分场景下我们拿到的需求都是prd,这部分有些已经很明确了,还需要事件风暴吗

    作者回复: 在下节课都会讨论到

    2022-12-18归属地:广东
    4
  • 奇小易
    2w2h笔记 why what 事件风暴步骤回顾 识别领域事件。 识别命令和角色以及相关查询数据。 识别领域名词。(从命令、角色、事件中提取对事件有影响的名词) 命令是什么? 产生业务结果的动作,可以从领域事件中倒推出来。 签订合同(命令)-> 合同已签订(领域事件) 角色是什么? 发起动作的对象就是所谓的角色。 例如:客户(角色) -> 签订合同(命令)-> 合同已签订(领域事件) 查询数据是什么? 要使角色完成动作所需要的最少必要数据。 例如:上述示例需要客户和合同信息才能完成。 事件风暴中不同元素在建模和实现层面都有什么作用? TODO 常见问题 第一个问题是,在事件风暴里是否要列出所有的领域事件和命令? 否,列出当前最为关注的内容。这一步关注的是全面,较为粗粒度的结果。 细化的部分放到后面进行。 第二个问题是,各个领域事件需要体现严格的时间顺序吗? 细节放在其它环节 第三个问题是,每个步骤的颗粒度应该有多大? 宜粗不宜细,保证每个步骤都在一个层次的粗粒度。 第四个问题是,事件风暴适用于所有项目吗? 它要解决的问题是需求与业务的一致等问题,只要需要解决这个问题,就可以用。 第五个问题是,怎么保存和维护事件风暴的结果? 1、如果需求管理有其它手段代替的话(用户故事、用例等),则可以把它当做临时结果。 2、如果没有的话,就持续维护它。 how Q: 识别命令和角色以及相关查询数据? A: 理解相关概念,然后用不同的便利贴来体现。 Q: 如何进行识别领域名词? 1、识别出角色、命令、查询数据、领域事件中的名词性概念。 2、把围绕同一名词的角色、命令、查询数据、领域事件放在一堆。 3、此时该名词已是领域名词。只需将其做个特殊标识,便于区分。 Q: 一个名词在事件和命令中都出现如何标识? 该名词后给个出现次数的数字即可。 how good --- 思考题: 1、如果你以前学习过用例分析、用户故事等方法,那么比较一下,看它们和事件风暴各自有什么优缺点? 两者实践不多,直观感受是事件风暴的文字量极少,图形展示比较直观。其它两种可能就对文字描述更为依赖。 2、如果你自己的项目中,已经有捕获行为需求的方法,那么怎样借鉴事件风暴的思路,为现有的方法添加协作和统一语言的实践? 统一语言的话,需求梳理过程中强调命名的统一,加个术语表。 协助过程优化TODO。

    作者回复: 笔记记得很详细,学习态度很认真,继续努力!

    2023-02-08归属地:湖北
    3
  • leesper
    抓个虫,最后一幅图中 R001的“举例“和R005的举例重复了,应该体现不同项目之间分配投入时间比例不超过100% 我认为事件风暴建模法比传统方法更敏捷高效,强调协作,三下五除二就把主要业务流程建模出来了,不用一上来就陷入不必要细节,而且和领域驱动设计是天生一对

    作者回复: 多谢捉虫,事件风暴确实是一种协作的好办法。

    2022-12-13归属地:广东
    2
    3
  • 基本上一个领域事件只对应一个命令,写了命令就相当于写了事件,把事件和命令都写出来,不是很啰嗦吗?

    作者回复: 是有点啰嗦,也可以只写事件,不写命令。

    2023-07-09归属地:广东
    2
  • Dowen Liu
    看了05、06领域建模又回来看这两讲事件风暴,重新理解了下,感觉事件风暴就是两个核心作用:对齐理解、统一语言。事件风暴对建模的帮助像是这两核心功能顺带的,而建模不必依赖事件风暴。

    作者回复: 是这样的

    2023-11-02归属地:北京
    1
  • Spoon
    1.用例分析感觉颗粒度比较大,并不能很好的提取出领域事件、领域模型,会比较粗粒度的从用户交互出发;用户故事这个没有用过 2.统一语言应该是业务、产品、开发对齐一致的结果,从需求梳理到最后一致的表达,刻画在模型上

    作者回复: 用例也可以做得很细。用例分析和事件风暴比起来,主要是没有强调协作(当人也没有反对)。

    2024-02-05归属地:浙江
收起评论
显示
设置
留言
26
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部