使用DDD的最终目的是深入学习业务如何运作。然后基于学习试验、质疑、再学习和重建模的过程。过程中面临的最大挑战是如何快速学习,并且在保证学习质量的前提下压缩学习时间(你的学习是需要公司付工资的)。
事件风暴就是一种相对高效的分析工具,除了比较适合DDD外还适合其它类似的分析工作,为了让大家快速明白事件风暴的玩法,笔者偷个懒从网上找了一个稍复杂点的例子。在学习完本节内容后,读者可以按事件风暴方法独自分析一下上面的协同系统,也可以是工作中的真实系统,分析后如果您认为有效,那么即使不实施DDD也可以把事件风暴的方法推广到项目组。
元素组成
- 领域事件:一个便签对应一个领域事件,写在橘黄色便签纸上;
- 命令:导致领域事件发生的操作,比如创建商品命令导致了商品已创建这一领域事件发生,写在蓝色便签纸上;
- 外部系统:外部依赖,写在粉红色便签纸上,
- 角色:这里的角色相当于实体的概念,不是权限管理系统里的那种角色,写在黄色便签纸上;
准备工作
在应用事件风暴做DDD设计之前,需要一个组织者,我们称这个人为DDD教练,这个人比较关键,它可以不懂业务,但需要对DDD的理论知识非常精通,由他来把控整个风暴过程,并在适当时候给予纠正和引导,风暴时间上一般控制在2~3个小时最为合适。DDD教练需要做好以下准备工作:
- 人员准备:开发、测试、产品、业务,项目干系人最好全部参加,方便大家拉齐认知;
- 地点准备:找一个会议室,最好是带玻璃墙的那种,不建议用电子看板;
- 材料准备:至少3种颜色的便签纸、至少2种颜色的白板笔以及板擦;
- 主题准备:如果人数较少,建议选择一个简单点的系统做为分析对象;如果人数较多建议选择一个稍复杂点的系统做为分析对象;
风暴过程
整个过程要聚集于业务和业务流程,因为参与人数比较多,讨论过程非常容易偏离主题,所以DDD教练适当时候给予纠正和引导,整体过程分为三步:
第一步:梳理业务流程
业务流程是用领域事件串连起来的,注意领域事件的命名方法;
第二步:添加命令、角色
一般来说一个领域事件是由一个命令触发的,特殊情况下多个命令也可能触发同一个领域事件。
命令添加完成后,添加角色,角色就是命令操作的实体,比如创建商品命令可以发布商品已创建事件,商品命令操作的角色是商品;
图示中还包括用粉红色便签表示的外部系统和用红色便签表示的时间,其中外部系统可以看成是外部命令,因为由外部团队负责,所以不做重点分析,红色便签可以理解为业务规划或是特殊说明,图上的时间只是特殊说明的一种。
第三步:归类角色寻找聚合
最后按角色分堆找出聚合,如下图所示,这里提示一点可以通过发生在聚合上的领域事件所需要的参数做合集来初步确定聚合属性。
第四步:规划领域
想了解更多事件风暴的细节和实施过程,读者可以在网上自行搜索体验,以改善实施过程中最到的问题
事件风暴结果
输出物 | 类型 | 说明 |
上下文映射图 | 图型 | 见节:第四步、上下文映射图 或 第五步、补充上下文映射图 |
通用语言描述表 | Excel表格 | 见节:第二页、提炼精炼语言中的表格 |
——————————————————————END————————————————————————