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://www.mzph.cn/web/2951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解线性方程组——(Gauss-Seidel)高斯-赛德尔迭代法 | 北太天元

一、Gauss-Seidel迭代法 n 3 n3 n3时 A ( a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ) , b ( b 1 b 2 b 3 ) , A\begin{pmatrix} a_{11} & a_{12} &a_{13}\\ a_{21} & a_{22} &a_{23}\\ a_{31} & a_{32} &a_{33}\\ \end{pmatrix} ,\quad b\be…

缓存神器-JetCache

序言 今天和大家聊聊阿里的一款缓存神器 JetCache。 一、缓存在开发实践中的问题 1.1 缓存方案的可扩展性问题 谈及缓存,其实有许多方案可供选择。例如:Guava Cache、Caffine、Encache、Redis 等。 这些缓存技术都能满足我们的需求,但现…

《从零开始的Java世界》10File类与IO流

《从零开始的Java世界》系列主要讲解Javase部分,从最简单的程序设计到面向对象编程,再到异常处理、常用API的使用,最后到注解、反射,涵盖Java基础所需的所有知识点。学习者应该从学会如何使用,到知道其实现原理全方位式…

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(LinuxApacheMySQLPHP)环境介绍、配置、搭建 LAMP介绍 LAMP是由Linux, Apache, MySQL, PHP组成的,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件&a…

纸箱码垛机:从传统到智能,科技如何助力产业升级

随着科技的飞速发展,传统工业领域正经历着一场重要的变革。作为物流行业重要一环的纸箱码垛机,其从传统到智能的转型升级,不仅提高了生产效率,还大幅降低了人工成本,为产业升级提供了强大助力。星派将探讨纸箱码垛机的…

【Unity】UnityEvent(一)

​UnityEvent----高效管理游戏事件的利器 在游戏开发中,事件系统是实现各种功能的关键组成部分。它允许我们将不同对象之间的交互解耦,使得代码更加模块化和易于维护。而UnityEvent作为Unity引擎提供的一种强大的事件系统工具,为开发者提供了…

CPDA|0到1突破:构建高效数据分析体系的秘密武器

在现今信息爆炸的时代,数据已经渗透到了我们生活的方方面面,成为了决策、创新和竞争优势的关键。因此,构建一套高效的数据分析体系,对于企业和个人而言,都是至关重要的。那么,如何在众多的数据海洋中脱颖而…

分类神经网络1:VGGNet模型复现

目录 分类网络的常见形式 VGG网络架构 VGG网络部分实现代码 分类网络的常见形式 常见的分类网络通常由特征提取部分和分类部分组成。 特征提取部分实质就是各种神经网络,如VGG、ResNet、DenseNet、MobileNet等。其负责捕获数据的有用信息,一般是通过…

5分钟——测试搭建的springboot接口(二)

5分钟——测试搭建的springboot接口(二) 1. 查看数据库字段2. 测试getAll接口3. 测试add接口4. 测试update接口5. 测试deleteById接口 1. 查看数据库字段 2. 测试getAll接口 3. 测试add接口 4. 测试update接口 5. 测试deleteById接口

Docker 开启远程安全访问

说明 如果你的服务器是公网IP,并且开放了docker的远程访问,如果没有进行保护是非常危险的,任何人都可以向你的docker中推送镜像、运行实例。我曾开放过阿里云服务器中docker的远程访问权限,在没有开启保护的状态下,几…

用 LMDeploy 高效部署 Llama-3-8B,1.8倍vLLM推理效率

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

Springboot 整合 Quartz框架做定时任务

在Spring Boot中整合Quartz&#xff0c;可以实现定时任务调度的功能 1、首先&#xff0c;在pom.xml文件中添加Quartz和Spring Boot Starter Quartz的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

一些好听且有心意的英文全名Burwood新南威尔士州伯伍德喝酒上脸就是乙醛中毒1. 康奈尔大学官宣恢复标化要求2. 香港城市大学(东莞)正式设立!

目录 一些好听且有心意的英文全名 Burwood新南威尔士州伯伍德 喝酒上脸就是乙醛中毒 1. 康奈尔大学官宣恢复标化要求 2. 香港城市大学&#xff08;东莞&#xff09;正式设立&#xff01; 一些好听且有心意的英文全名 在选择好听且有意义的英文全名时&#xff0c;我们可…

synchronized的底层原理

目录 介绍 实现原理 对象头 Monitor&#xff08;监视器&#xff09; 锁升级 偏向锁 轻量级锁 重量级锁 锁的优缺点 介绍 synchronized 是 Java 中的关键字&#xff0c;它用于锁定代码块或方法&#xff0c;以确保同一时刻只有一个线程可以进入被锁定的部分。这在多线程…

css盒子设置圆角边框的方法

前言 欢迎来到我的博客 个人主页&#xff1a;北岭敲键盘的荒漠猫-CSDN博客 本文为我整理的设置圆角边框的方法 需求描述 我们在设置盒子边框时&#xff0c;他总是方方正正的。 我们想让这个直直的边框委婉一点该怎么办呢。这个就提到了我们这篇文章讲的东西&#xff1a; bord…

聚观早报 | OpenAI在印度开始招聘;特斯拉将发布一季度财报

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月23日消息 OpenAI在印度开始招聘 特斯拉将发布一季度财报 理想汽车全线产品降价 优酷升级悬疑剧场为白夜剧场 …

ffmpeg支持MP3编码的方法

目录 现象 解决办法 如果有编译包没有链接上的情况 现象 解决办法 在ffmpeg安装包目录下 &#xff0c;通过./configure --list-encoders 和 ./configure --list-decoders 命令可以看到&#xff0c;ffmpeg只支持mp3解码&#xff0c;但是不支持mp3编码。 上网查寻后发现&…

C++ :设计模式实现

文章目录 原则单一职责原则开闭原则依赖倒置原则接口隔离原则里氏替换原则 设计模式单例模式观察者模式策略模式代理模式 原则 单一职责原则 定义&#xff1a; 即一个类只负责一项职责 问题&#xff1a; 类 T 负责两个不同的职责&#xff1a;职责 P1&#xff0c;职责 P2。当…

Tomcat源码解析——一次请求的处理流程

在上一篇文章中&#xff0c;我们知道Tomcat在启动后&#xff0c;会在Connector中开启一个Acceptor(接收器)绑定线程然后用于监听socket的连接&#xff0c;那么当我们发出请求时&#xff0c;第一步也就是建立TCP连接&#xff0c;则会从Acceptor的run方法处进入。 Acceptor&…

使用CSS+HTML完成导航栏

HTML <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>导航栏示例</title> &l…