ChatGPT实战100例 - (18) 用事件风暴玩转DDD

文章目录

  • ChatGPT实战100例 - (18) 用事件风暴玩转DDD
    • 一、标准流程
    • 二、定义目标和范围
    • 三、准备工具和环境
    • 四、列举业务事件
    • 五、 组织和排序事件
    • 六、确定聚合并引入命令
    • 七、明确界限上下文
    • 八、识别领域事件和领域服务
    • 九、验证和修正模型
    • 十、生成并验证软件设计
    • 十一、总结

ChatGPT实战100例 - (18) 用事件风暴玩转DDD

在这里插入图片描述

一、标准流程

通过事件风暴进行ddd的标准流程是?

事件风暴(Event Storming)是一种DDD的实践方法,核心思想是通过大量的黏贴纸来描述和组织业务流程及事件,以此来促进团队成员对业务领域的理解和沟通。

以下是通过事件风暴进行DDD的标准流程:

  1. 定义目标和范围:明确本次事件风暴的目标是什么,范围覆盖哪些业务流程,参与人员包括哪些角色(如业务专家、开发人员、产品经理等)。

  2. 准备工具和环境:需要一张大的白板或者海报纸,各色标签贴纸、记号笔等。一般用橙色表示事件,蓝色表示命令,红色表示聚合等。

  3. 列举业务事件:让所有参与者一起列举出他们能想到的所有业务事件,并用黄色便签纸写下事件的名称,贴在白板上。事件应描述为“某某已经发生”,比如“订单已创建”、“支付已完成”等。

  4. 组织和排序事件:将列出的事件按照它们发生的顺序和关联性进行组织和排序。把相互关联的事件放在一起,形成一个业务流程。

  5. 确定聚合:找出那些影响事件发生的对象,这些就是可能的聚合。聚合负责保证业务规则的一致性。

  6. 引入命令:确定哪些命令会导致事件的发生,用蓝色便签纸表示。命令是对聚合的一个操作,它会改变聚合的状态并可能触发事件。

  7. 明确界限上下文:根据业务流程的不同,划分出不同的界限上下文。

  8. 识别领域事件和领域服务:找出流程中的领域事件和领域服务,领域事件表示业务流程中的重要变化,领域服务则是无法归类到聚合的一些业务操作。

  9. 验证和修正模型:让业务专家验证这个模型是否符合实际的业务流程,不断迭代和修正模型。

  10. 生成并验证软件设计:根据事件风暴的结果生成软件设计,然后通过编码和测试来验证设计的正确性。

二、定义目标和范围

定义目标和范围:明确本次事件风暴的目标是什么,范围覆盖哪些业务流程,参与人员包括哪些角色(如业务专家、开发人员、产品经理等)。

现在你是领域专家,我会按照流程步骤进行事件风暴,你帮我对本步骤做优化。
定义目标和范围:
本次事件风暴的目标是完成网页打印小程序的设计,
范围:网页打印

好的,关于网页打印小程序的设计,以下是更具体的目标和范围定义:

目标:

  1. 明确用户如何使用小程序完成网页打印的全流程。
  2. 揭示网页打印的主要业务逻辑和关键操作。
  3. 确定主要的领域模型,包括相关的事件、命令和聚合。

范围:

  1. 用户如何在小程序中选择或输入网页地址。
  2. 用户如何设置打印参数,比如打印的页数、颜色、纸张大小等。
  3. 小程序如何处理打印请求,包括生成打印预览、提交打印任务等。
  4. 如何反馈打印进度和结果给用户。
  5. 在出现问题时,如何处理异常和错误。

这样的定义可以帮助我们更清晰地理解和划分业务流程,为后续的事件风暴步骤奠定基础。

三、准备工具和环境

准备工具和环境:需要一张大的白板或者海报纸,各色标签贴纸、记号笔等。一般用橙色表示事件,蓝色表示命令,红色表示聚合等。

线下就好,后期AI更先进了可以直接让AI画图和修改

四、列举业务事件

列举业务事件:让所有参与者一起列举出他们能想到的所有业务事件,并用黄色便签纸写下事件的名称,贴在白板上。事件应描述为“某某已经发生”,比如“订单已创建”、“支付已完成”等。

使用事件风暴列举业务事件

使用事件风暴的方法,我们可以列举如下的业务事件:

  1. 网页地址输入事件:当用户在输入框中输入或粘贴网页地址时触发。

  2. 打印参数设置事件:当用户设置了打印页数、颜色、纸张大小等打印参数时触发。

  3. 打印预览生成事件:当系统根据用户输入的网页地址和设置的打印参数生成打印预览时触发。

  4. 打印任务提交事件:当用户确认打印预览无误,点击“打印”按钮提交打印任务时触发。

  5. 打印进度更新事件:当打印任务的进度发生变化时触发。例如,当打印任务被添加到打印队列,或者正在打印,或者打印完成。

  6. 打印结果反馈事件:当打印任务完成,系统生成打印结果并反馈给用户时触发。

  7. 打印记录保存事件:当用户选择保存打印记录时触发。

  8. 网页加载失败事件:当系统无法加载用户输入的网页地址时触发。

  9. 打印异常事件:当打印过程中出现问题时触发。例如,打印机缺纸,打印任务被取消等。

五、 组织和排序事件

组织和排序事件:将列出的事件按照它们发生的顺序和关联性进行组织和排序。把相互关联的事件放在一起,形成一个业务流程。
使用platuml展现这个流程。

这是一种可能的顺序和关联性组织:

  1. 网页地址输入事件
  2. 网页加载失败事件(如果适用)
  3. 打印参数设置事件
  4. 打印预览生成事件
  5. 打印任务提交事件
  6. 打印进度更新事件
  7. 打印异常事件(如果适用)
  8. 打印结果反馈事件
  9. 打印记录保存事件

当使用plantuml来展示这一流程时,代码可能如下:

@startuml
:网页地址输入;
if (网页加载失败) then (yes):处理失败事件;stop
else (no):打印参数设置;:打印预览生成;if (打印预览确认) then (yes):打印任务提交;:打印进度更新;if (打印异常) then (yes):处理异常事件;else (no):打印结果反馈;:打印记录保存;endifelse (no)stopendif
endif
@enduml

这将创建一个流程图,显示了各个业务事件的流程和可能的决策点。

六、确定聚合并引入命令

作为领域专家,完成下面两个步骤
确定聚合:找出那些影响事件发生的对象,这些就是可能的聚合。聚合负责保证业务规则的一致性。
引入命令:确定哪些命令会导致事件的发生,用蓝色便签纸表示。命令是对聚合的一个操作,它会改变聚合的状态并可能触发事件。

确定聚合:在上述事件中,可能的聚合有:

  1. 打印任务:包含了文件、打印参数、打印进度等信息,聚合的业务规则包括打印参数必须完全、打印进度必须是有序的等。
  2. 用户:产生打印任务的发起者,聚合的业务规则包括用户必须存在、用户的打印权限等。

引入命令:对应的命令可能有:

  1. 创建打印任务:用户提交打印任务后,系统需要创建打印任务。
  2. 更新打印进度:当打印任务开始执行后,需要更新打印进度。
  3. 完成打印任务:当打印任务完成后,需要更新打印任务的状态并通知用户。
  4. 保存打印记录:在打印完成后,用户可以选择保存打印记录。
  5. 加载网页:在用户输入网页地址后,系统需要加载网页并生成预览。
  6. 设置打印参数:用户在提交打印任务前,需要设置打印的参数。

七、明确界限上下文

明确界限上下文:根据业务流程的不同,划分出不同的界限上下文。
在这个业务场景中,我们可以划分出以下几个界限上下文:

  1. 网页加载上下文:负责处理用户输入的网页地址,加载网页并生成预览。

  2. 打印任务上下文:负责处理打印任务的创建,参数设定,进度更新和任务完成等操作。

  3. 打印结果反馈上下文:负责打印任务完成后,生成打印结果并反馈给用户。

  4. 打印记录保存上下文:负责在打印完成后,保存打印记录。

在这些界限上下文中,不同上下文的聚合可能存在交互和通信,例如,打印任务上下文中的“打印任务”聚合在打印完成后,可能需要与“打印记录保存”上下文中的“打印记录”聚合进行交互,保存打印记录。但界限上下文之间的交互应保持尽可能的松耦合,以保持系统的灵活性和可维护性。

八、识别领域事件和领域服务

识别领域事件和领域服务:找出流程中的领域事件和领域服务,领域事件表示业务流程中的重要变化,领域服务则是无法归类到聚合的一些业务操作

识别领域事件:在我们的流程中,我们可以识别出以下的领域事件:

网页加载完成:这是用户提供的网页地址被成功加载的标志。
打印预览已生成:这表示针对用户设置的打印参数,预览已经成功生成。
打印任务已提交:用户提交打印任务,准备开始打印。
打印进度已更新:打印任务的状态改变,如:开始打印、打印中、打印完成等。
打印结果已反馈:打印任务完成后,结果被反馈给用户。
打印记录已保存:用户选择保存打印记录后,记录被成功保存。
识别领域服务:这些是一些无法归类到具体聚合,但又对业务流程至关重要的操作:

网页加载服务:负责根据用户提供的网页地址加载网页。
预览生成服务:根据用户设置的打印参数,生成打印预览。
打印服务:负责处理打印任务,包括打印进度的更新和打印结果的生成。
记录保存服务:在打印完成后,根据用户的选择,保存打印记录。

九、验证和修正模型

验证和修正模型:让业务专家验证这个模型是否符合实际的业务流程,不断迭代和修正模型。

验证和修正模型:

  1. 业务专家可以对模型进行验证,确保它符合实际的业务流程。
  2. 如果有任何不完善的地方,可以进行修正和优化。
  3. 不断重复这个过程,直到模型完全符合业务需求。

用魔法打败魔法,用AI做业务专家把前面的文档给他反复修改迭代

十、生成并验证软件设计

生成并验证软件设计:根据事件风暴的结果生成软件设计,然后通过编码和测试来验证设计的正确性。

生成并验证软件设计:

  1. 生成代码:根据事件风暴的结果,生成相应的代码。
  2. 编写测试用例:根据业务流程和事件,编写相应的测试用例。
  3. 运行测试用例:运行测试用例,验证代码的正确性。
  4. 持续迭代和优化:根据测试结果,不断优化和迭代代码,直到代码完全符合业务需求。

这已经是另一个故事了~

十一、总结

  1. 事件风暴是一种DDD的实践方法,通过大量的黏贴纸来描述和组织业务流程及事件,以此来促进团队成员对业务领域的理解和沟通。

  2. 事件风暴的过程包括定义目标和范围、准备工具和环境、列举业务事件、组织和排序事件、确定聚合、引入命令、明确界限上下文、识别领域事件和领域服务、验证和修正模型、生成并验证软件设计等步骤。

  3. AI真香!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2981907.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

力扣HOT100 - 108. 将有序数组转换为二叉搜索树

解题思路: 二叉搜索树一般使用中序遍历 class Solution {public TreeNode sortedArrayToBST(int[] nums) {return helper(nums,0,nums.length-1);}public TreeNode helper(int[] nums,int left,int right){if(left>right) return null;//确定根节点//总是选择中…

2024年阿里云域名注册活动,com域名1元起,cn域名33元起

随着互联网的飞速发展,一个好的域名已经成为了企业或个人在线身份的重要标志。注册域名是很多用户开启互联网业务的第一步,2024年很多注册商现在com域名注册都快逼近80元了。作为国内最大的域名注册商与云服务商,近日,阿里云推出了…

提升你的C编程技能:使用cURL下载Kwai视频

概述 本文将介绍如何利用C语言以及cURL库来实现Kwai视频的下载。cURL作为一个功能强大的网络传输工具,能够在C语言环境下轻松地实现数据的传输。我们还将探讨如何运用代理IP技术,提升爬虫的匿名性和效率,以适应Kwai视频平台的发展趋势。 正…

Java web应用性能分析之【Linux服务器性能监控分析概叙】

大多数场景,我们的Java web应用都是部署在linux环境,所以对linux服务器的性能指标需要有一个比较清晰的认识。Linux服务器的性能指标无非就5个方面:CPU、内存、磁盘、网络、文件系统。不同的性能指标都有对应的命令进行监控和查看&#xff08…

【前端面试常问】什么是前端工程化

🌟【前端面试常问】前端工程化🌟 📚 什么是前端工程化? 🎉 前端工程化,简而言之,是通过整合先进的工具链和最佳实践,将前端开发过程实现标准化、自动化和高效化的过程,…

美森快船和以星快船有什么区别?美线海运都有哪些快船?

在繁忙的国际海运市场中,快船服务以其高效、快捷的特点受到广大货主的青睐。其中,美森快船和以星快船作为知名的海运服务提供商,凭借着卓越的服务品质,在航运界树立了良好的口碑。那么,美森快船和以星快船究竟有何不同…

探讨自回归模型和扩散模型的发展应用

在当前大模型驱动的内容创新浪潮中,人工智能产业正以前所未有的力度拥抱一场由大模型技术策动的科技革新运动。这场革命不仅重塑了人机交互的边界,使其跃升至更高层次的认知协作,而且正在颠覆传统的计算思维与执行模式,催生出全新…

SpringCloud引入SpringBoot Admin

Spring Boot Admin可以监控和管理Spring Boot&#xff0c;能够将 Actuator 中的信息进行界面化的展示&#xff0c;也可以监控所有 Spring Boot 应用的健康状况&#xff0c;提供警报功能。 1. 创建SpringBoot工程 2. 引入相关依赖 <dependency><groupId>com.alib…

安全小课堂丨什么是暴力破解?如何防止暴力破解

什么是暴力破解&#xff1f; 暴力破解也可称为穷举法、枚举法&#xff0c;是一种比较流行的密码破译方法&#xff0c;也就是将密码进行一一推算直到找出正确的密码为止。比如一个6位并且全部由数字组成的密码&#xff0c;可能有100万种组合&#xff0c;也就是说最多需要尝试10…

Python-VBA函数之旅-isinstance函数

目录 一、isinstance函数的常见应用场景&#xff1a; 二、isinstance函数使用注意事项&#xff1a; 三、如何用好isinstance函数&#xff1f; 1、isinstance函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff…

网络安全之SQL注入及防御(下篇)

目录 什么是SQL注入&#xff1f; 一&#xff0c;SQL注入会导致什么呢&#xff1f; 二&#xff0c;SQL注入思想与步骤 三&#xff0c;SQL注入的绕过 四&#xff0c;sqlmap工具的使用 五&#xff0c;sql注入的防御方法 总结 什么是SQL注入&#xff1f; SQL注入&#xff08;…

C++|模板进阶(非类型模板参数+特化)

目录 一、非类型模板参数 二、模板特化 2.1函数模板特化 2.2类模板特化 2.2.1全特化 2.2.2偏特化 三、模板不支持分离编译 四、模板优缺点 一、非类型模板参数 在模板初阶中&#xff0c;所学习的模板的参数是类型形参&#xff0c;但其实还有非类型形参。 类型形参&am…

gcc make makefile cmake之间的关系梳理

gcc是GNU Compiler Collection&#xff08;GNU编译器套件&#xff09;&#xff0c;也可以简单认为是编译器&#xff0c;它可以编译很多编程语言&#xff08;包括C、C、Object-C、Fortran、Java等&#xff09;当你的程序只有一个源文件&#xff0c;直接用gcc命令编译它。但是当你…

系统思考—啤酒游戏

最近有不少的合作伙伴来询问我啤酒游戏这个来自于MIT&#xff08;麻省理工学院&#xff09;经典的沙盘&#xff0c;上周刚刚结束Midea旗下的一家公司市场运营部《啤酒游戏沙盘-应对动态性复杂的系统思考智慧》的课程。 参与这次沙盘体验的团队成员深刻体会到了全局思考的重要性…

GDPU unity游戏开发 碰撞体与关节

让你设计的角色跑起来吧&#xff0c;可以是动画&#xff0c;也可以是碰撞器的运动。 运动小车 找到小车素材&#xff0c;导入到层级面板。然后可以新建一个地面让小车在上面运动&#xff0c;新建一个方块当障碍物。 摆放好后&#xff0c;要加组件。记住&#xff0c;在unity中运…

02 VMware下载安装银河麒麟(Kylin)系统

02 VMware下载&安装银河麒麟&#xff08;Kylin&#xff09;系统 一、官网1、官网地址 二、下载1、官网下载&#xff08;1&#xff09;服务器操作系统&#xff08;2&#xff09;申请试用&#xff08;3&#xff09;产品试用申请&#xff08;4&#xff09;点击下载连接即可 2、…

SQL基础(关系模型)

目录 SQL及定义域概念 SQL是什么 定义域 关系简介 关系的定义 关系的封闭性 关系模型简介 关系模型 谓词逻辑 运算基础 SQL的加减乘除 SQL的除法1 SQL的除法2 SQL的除法3 三值逻辑 NULL的危害 消除NULL SQL及定义域概念 SQL是什么 Structured Query Languag…

泽众RPA1.1.2产品升级,新增团队管理、用户管理、工作空间及自动化任务等功能,大幅提升工作效率

泽众RPA1.1.2产品升级&#xff0c;通过新增团队管理模块、用户管理模块、工作空间功能、定时任务功能以及Excel和网络指令&#xff0c;解决了团队协作与权限管理不精细、任务自动化水平有限以及数据处理和网络操作功能局限等问题。升级后的产品不仅提升了工作效率和团队协作能力…

【Qt常用控件】—— 显示类控件

目录 1.1 Label 1.2 LCD Number 1.3 ProgressBar 1.4 Calendar Widget 1.5 小结 1.1 Label QLabel 控件是 Qt 中用于显示文本或图像的部件&#xff0c;是用户界面开发中常用的组件之一。 核⼼属性如下&#xff1a; 属性 说明 text QLabel 中的⽂本 textFormat ⽂本的格…

MySQL主从结构搭建

说明&#xff1a;本文介绍如何搭建MySQL主从结构&#xff1b; 原理 主从复制原理如下&#xff1a; &#xff08;1&#xff09;master数据写入&#xff0c;更新binlog&#xff1b; &#xff08;2&#xff09;master创建一个dump线程向slave推送binlog&#xff1b; &#xff…