事件风暴是一种快速,轻量级且未得到充分认可的群体建模技术,它对于加速开发团队而言非常强大,有趣且有用。作为Alberto Brandolini的心血结晶,它是Gamestorming和领域驱动设计(DDD)原则的综合学习实践。该技术不限于软件开发。您可以将其应用于几乎任何技术或业务领域,尤其是那些大型,复杂或两者兼而有之的领域。

事件风暴催化并加速小组学习,通常在几小时或几天内实现更传统的建模技术从未做过的事情 - 对软件必须运行的领域的共同理解。

要了解事件风暴,您首先需要了解两个关键术语。域事件是域专家感兴趣的任何事件。域专家对数据库,Web套接字或设计模式不感兴趣,但对业务领域感兴趣。域事件以不指定特定实现的方式捕获这些事实。

事件风暴如何运作

您运行一个辅助研讨会进行一个活动风暴会议。每个人都参与其中,并且协调人使团队保持专注和参与,指导进展到完整的域模型。该小组从域事件开始,向前和向后遍历模型以确保所有内容都被覆盖。然后,该组添加导致事件的命令或触发器,并考虑所有命令源,包括用户,外部系统甚至时间。

该组识别接受命令和完成事件的聚合,并开始将聚合分组到有界上下文中。在此过程中,识别关键测试场景用户和目标并将其合并到模型中。最后,添加有界上下文之间的关系以创建上下文映射。然后用代码对所得模型进行挑战,以验证组学习并验证模型。

虽然DDD社区的事件风暴正在增长,但在该专业之外几乎不为人知。这是一种耻辱,因为只有主持人必须是DDD从业者才能指导小组走向完整的模型。包括非技术产品所有者在内的每个人都可以参与对域的理解和建模。整个团队了解域越好,软件实施越有可能反映域,这是DDD的主要目的。

走得更快

如果你可以完成这个项目,你刚刚重新完成了,同一个团队,知道你现在知道什么,你能够更快地完成它吗?

是的,因为你已经学会了成功所需要的知识。小组学习速度慢是软件开发过程中的主要制约因素。正如Brandolini所说,“软件开发是一个学习过程;工作代码是一个副作用。”

域事件有助于构建域模型;它们起到了骨骼的作用。这不是设计,它是关于域的模型 - 一个视角。您使用域事件来推动建模,因为技术人员和领域专家都很容易理解。域事件几乎没有关于设计的说明,也没有关于实现的内容,这正是你想要的一个好的域模型。

一种不同的建模方法

更传统的DDD建模工作通常由小组或个人开发人员完成,有时在与产品所有者数据,对象或行为进行几次对话之后。不幸的是,这开始建模的程度太接近实现域,而不是局限于业务领域。如果您从数据建模开始,您的思考和对话将很快转移到模式,事务和其他与业务领域无关的事情。如果从行为建模开始,当您将行为分解为任务并将其链接到流程时,您会分心。

这些是实现概念,而不是业务领域概念。虽然有很多选择来表示数据和实现行为,但域事件没有其他选择。由于域事件表示域的事实,因此这些事件仅在基础业务发生更改时才会发生显着变化。因此,域事件是您模型的更稳定和更具弹性的脚手架

但是这种方法有一个更令人信服的理由:将初始讨论限制在域事件中会迫使每个人,特别是开发人员,专注于域的无处不在的语言。他们必须学习它,定义它,改进它,并在有关模型的对话中专门使用它。

虽然以域事件为中心的模型可能会自然地导致事件驱动的系统设计(EDA),例如事件源命令查询责任隔离(CQRS),但这是一种选择,而不是义务。实现模型的软件不必是事件驱动的,甚至不是面向对象的(尽管这些通常是很好的选择)。

加速小组学习

想想你完成的最后一个项目。开发人员必须做些什么才能理解域模型并构建系统?在发挥故事的过程中,开发人员可能会在域专家解决方案架构师测试用户其他团队成员之间穿梭。虽然这个过程可能会导致所有团队成员对整个域的共同理解,但这不太可能。转移的领域知识过于稀疏,过于分离,过于孤立,而且过于分散,无法在任何单个开发人员的脑海中产生完整的模型,更不用说整个团队理解的常见模型。

相反,这些对话可以在事件风暴会话期间发生。通常这些对话是按顺序发生的,但是在事件发生时,它们都会立即发生。通过这种方式,您可以解决域中任何部分的任何冲突或不连续性,同时所涉及的每个人都在场并参与其中。

DDD的最大障碍是开发人员倾向于专注于他们非常了解的事物 - 软件开发概念 - 而不是业务领域。当非技术人员(例如产品所有者或用户拥护者)与开发人员会面并开始用编程术语而不是商业术语描述系统时,可以看到这种情况的一个症状。如果开发人员不了解域,则无法正确建模。

何时何地使用事件风暴

使用事件风暴最明显的时间是在项目开始时,因此团队可以从对域模型的共同理解开始。使用事件风暴的另一个高回报时间是项目结束的一部分,用于捕获和分享团队在构建软件过程中学到的知识。这很重要,因为没有任何一个开发人员可能因为偶然的发现,修改以及对其他区域的有限暴露而了解整个域。使用较小规模的事件风暴也是有利的,例如当您考虑改变某些事物,开始新故事或制定不同的场景或替代方案时。

尝试一下

事件风暴旨在创建和分享对域模型的共同理解;它不是设计文档,流程图,UML图,部署计划,体系结构图或与实现相关的任何其他内容的替代品。可以将其视为低保真,临时信息辐射器,用于与其他人共享和确认域模型。

尝试一下暴力事件,你将获得多种好处。使用协作组学习,您将实现快速的域驱动建模,而无需每个人都必须成为DDD专家,您的团队和术语将与业务领域专家的一致。这个过程非正式且价格低廉 - 您只需要纸张,便签和笔,您就可以很好地加快团队的工作效率。


请关注公众号:【首席架构师智库】

讨论:请加入知识星球【首席架构师圈】或者小号【jiagoushi_pro】或者QQ群【11107777】

horizon client 无法识别域_「领域驱动设计DDD」事件风暴简介:实现域驱动设计的简便方法...相关推荐

  1. 热成像成像不清楚是什么时候_「从零搞机」热成像仪查看 分形工艺Node 202 机箱 风道散热情况...

    分形工艺的Node 202是我非常喜欢的一个机箱,是现如今搞机圈一众肥宅A4机箱里为数不多的瘦高个. 分形工艺Fractal Design Node 202 为什么喜欢它? 好看,耐看 分形工艺的设计 ...

  2. define定义的函数如何引用_「C与指针心得」25.预处理器-宏函数

    感谢您的阅读与点赞!欢迎关注:「大猫玩程序」,查看C语言系列文章 上一节讲了一些系统的预定义宏,这一节来讲一讲 宏定义.宏函数. 预处理常量 define: 预处理器指令从#开始,到最后第一个换行符为 ...

  3. chrome vue插件_「Vue学习记录一」开发环境准备

    1.开发工具 - VS Code ❝ 选择 VS Code 是因为这是一款很容易上手的工具,在 VS Code 中找到的每个功能都完成一项出色的工作,构建了一些简单的功能集,包括语法高亮.智能补全.集 ...

  4. ideahtml标签不提示_「系统自带标签」如何帮门店区分价值顾客?| 早8点141期

    141 期 | 系统标签 · 本文约 603 字,预计阅读 3 分钟 · 大家好,我是小檬,这是乐檬早八点为乐檬用户提供的产品应用学习栏目第 141 期. 今天的主题是:[新·会员篇]「系统自带标签」 ...

  5. sscanf函数用法详解_「MOS考点详解」一道例题详解GETPIVOTDATA函数的用法

    要点提示 GETPIVOTDATA函数是MOS Excel认证考试的重要考点.资深Office培训师谷月老师在此借助一道例题详细解读这个函数. 例题 在「按地区」工作表上的单元格 H3 中,使用 GE ...

  6. 开发安卓app游戏_「安卓APP开发流程」安卓APP如何开发的?

    21世纪,智能手机走进了人们的生活,现在的智能手机的操作系统基本分为两种,一种是IOS系统(苹果系统).安卓系统,其中,安卓系统是开源的,所以很多品牌商会讲安卓包装成自己的系统,但核心还是一样的,都是 ...

  7. excel表格内容拆分_「职场百科书」—「实用小技巧」—(Excel表格拆分)

    工作中我们经常会遇到这种情况,所有的数据都整合在一个Excel表格里面了,现在想按需求分别拆分成多个工作表,有什么好办法吗?利用透视表,我们就可以轻松解决. 如下图所示,从销售一部到销售七部的所有业绩 ...

  8. pwm一个时间单位_「硬见小百科」什么是PWM“死区”?

    原标题:「硬见小百科」什么是PWM"死区"? PWM是脉宽调制,在电力电子中,最常用的就是整流和逆变.这就需要用到整流桥和逆变桥.对三相电来说,就需要三个桥臂.以两电平为例,每个桥 ...

  9. 安卓app开发方案_「安卓APP开发流程」安卓APP如何开发的?

    21世纪,智能手机走进了人们的生活,现在的智能手机的操作系统基本分为两种,一种是IOS系统(苹果系统).安卓系统,其中,安卓系统是开源的,所以很多品牌商会讲安卓包装成自己的系统,但核心还是一样的,都是 ...

最新文章

  1. ASP.net随机数应用实例
  2. Android 美团Robust热更新 使用入门
  3. 宠物商店(pet-shop) 学习笔记
  4. linux环境cpp/c文件的makefile编写(caffe举例)
  5. 逾期后,如何修复个人征信?
  6. React之事件处理
  7. 信息学奥赛一本通(1397:简单算术表达式求值)
  8. @Select的使用说明
  9. NumPy Beginner's Guide 2e 带注释源码 二、NumPy 基础入门
  10. html音乐播放器代码大全,关于HTML 音乐播放器代码|音乐播放器网页代码大全(转)...
  11. 乌班图系统部署jdk
  12. 发几个vb整人小程序代码.第一次发帖.希望大家多多支持
  13. pipe()函数详解
  14. 如何存储10亿的数据
  15. 关于AI输电线路在线监测多目4G摄像头低功耗解决方案
  16. 54:第五章:开发admin管理服务:7:人脸入库流程;人脸登录流程;浏览器开启视频调试模式(以便能够在本机的不安全域名的情况下,也能去开启摄像头);
  17. 盘口技术大全(六): 吸筹与试盘
  18. MoneyKing链游平台,元宇宙Web3.0黑马爆发
  19. Java课程中心练习题
  20. cad缩小_CAD图纸输出或打印后的尺寸为什么比实际小几毫米?【AutoCAD教程】

热门文章

  1. 北科大计算机技术研招考纲,北京科技大学2021年全国硕士研究生招生考试自命题科目考试大纲...
  2. azure mysql sql,UiPath连接Azure Sql Server数据库
  3. aop+注解 实现对实体类的字段校验_SpringBoot实现通用的接口参数校验
  4. 串口服务器常见五大问题解决方案
  5. 【渝粤教育】国家开放大学2018年秋季 1306T社会政策 参考试题
  6. 【渝粤题库】陕西师范大学200751 《操作系统》作业
  7. 如何选择LoRa产品
  8. 单片机c语言篮球比分_基于单片机的篮球比赛计时计分器的设计
  9. java 提交的内存_Java使用内存映射实现大文件的上传
  10. Android 21mod,熊猫博士小镇合集 Mod