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,一经查实,立即删除!

相关文章

MySQL数据库SSL连接测试

环境信息:Centos7 MySQL 5.7.21 在该环境上进行SSL连接测试。 MySQL Server 配置: vi /etc/my.cnf [mysql] default-character-set utf8mb4[client] default-character-set utf8mb4# ssl_mode [ DISABLED | PREFERRED(default if not set) | REQ…

jenkins流水线学习(工具)

Jenkins特意为了更好使用pipeline,开发了一些工具类,方便我们更好地在step中处理各种需求。 一、Pipeline Utility Steps Pipeline Utility Steps 这是个插件,需要在jenkins插件管理安装。参考来源:Jenkins高级篇之Pipeline方法…

解线性方程组——(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接口

Java删除文件夹及文件夹下所有子目录及文件

代码 import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;/** * 删除文件夹及文件夹下所有子目录及文件 */ public void deleteFolder() { // 路径 Path directory Paths.get("/your/delete/path"); try (Stream<Pa…

Docker 开启远程安全访问

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

通过标准网格点计算等值线

本资源提供了通过输入标准网格点数据计算等值线的接口&#xff0c;接口通过Qt实现&#xff0c;调整部分数据类型后也可转为C代码。 接口使用也比较简单&#xff0c;将本资源的源码添加到工程中&#xff0c;然后调用GetContourlinesByGridPoints_new()函数即可得到等值线。该函数…

C#多线程之(Thread)详解与示例

文章目录 一、线程的基本概念二、C#中创建和启动线程的方法三、线程的生命周期四、线程的状态转换五、线程之间的通信机制六、线程安全的编程实践使用 ConcurrentBag 进行线程安全的数据收集 总结 本文将深入探讨C#多线程编程的核心概念&#xff0c;包括线程的基本概念、创建和…

人工智能技术概述_3.机器学习

1.机器学习定义 广义上来说&#xff0c;机器学习指专门研究计算机怎么模拟或实现人类的学习行为以获取新的知识或技能的学科&#xff0c;使计算机重新组织已有的组织结构并不断改善自身的性能。更加精确地说&#xff0c;一个机器学习的程序就是可以从经验数据E中对任务T进行学习…

LInux常用命令总结(三):用户管理命令与用户组管理命令

1. 用户管理命令 useradd&#xff1a;添加新用户 用法&#xff1a; useradd 用户名 &#xff08;功能描述&#xff1a;添加新用户&#xff09; ​useradd -g 组名 用户名 &#xff08;功能描述&#xff1a;添加新用户到某个组&#xff09;举例&#xff1a;useradd user1 passw…

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

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

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…

做外贸而已,千万不要太老实了!

朋友们&#xff0c;跟你们分享个秘密&#xff0c;做外贸&#xff0c;别太实诚了&#xff01;我知道很多新人小伙伴刚入行那会儿&#xff0c;几个月都开不了张单子。原因&#xff0c;就是太老实了&#xff01; 1客户说价格高 新手可能会直说&#xff1a;“亲&#xff0c;我们的…