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)
      :打印结果反馈;
      :打印记录保存;
    endif
  else (no)
    stop
  endif
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真香!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

淘宝扭蛋机小程序开发:开启趣味购物新篇章

随着移动互联网的迅猛发展,用户对于购物体验的需求也在不断升级。淘宝作为国内领先的电商平台,始终致力于为用户创造更加新颖、有趣的购物环境。为了满足广大用户的期待,淘宝精心打造了一款全新的扭蛋机小程序,旨在为用户带来前所…

37. UE5 RPG创建自定义的Ability Task

在前面的文章中,我们实现了一个火球术的一些基本功能,火球术技能的释放,在技能释放后,播放释放动画,在动画播放到需要释放火球术的位置时,将触发动画通知,在动画通知中触发标签事件,…

JetBrains RubyMine v2024.1 安装教程 (Rails/Ruby集成开发环境)

前言 JetBrains RubyMine是一款杰出而全面的Ruby代码编辑器,能够深入识别动态语言的细节,为用户提供智能编码辅助功能。它能够自动检测错误代码段,并提供智能的编写和修复代码的建议,帮助用户进行代码重构。此外,Ruby…

在Redux Toolkit中使用redux-persist进行状态持久化

在 Redux Toolkit 中使用 redux-persist 持久化插件的步骤如下: 安装依赖 npm install redux-persist配置 persistConfig 在 Redux store 配置文件中(例如 store.js),导入必要的模块并配置持久化选项: import { combineReducers } from redux; import { persist…

Jmeter插件技术:性能测试中服务端资源监控

性能测试过程中我们需要不断的监测服务端资源的使用情况,例如CPU、内存、I/O等。 Jmeter的插件技术可以很好的实时监控到服务器资源的运行情况,并以图形化的方式展示出来,非常方便我们性能测试分析。 操作步骤: 1、安装插件管理…

主打国产算力 广州市通用人工智能公共算力中心项目签约

4月9日,第十届广州国际投资年会期间,企商在线(北京)数据技术股份有限公司与广州市增城区政府就“广州市通用人工智能公共算力中心”项目进行签约。 该项目由广州市增城区人民政府发起,企商在线承建。项目拟建成中国最…

后端工程师——Java工程师如何准备面试

在国内,Java 程序员是后端开发工程师中最大的一部分群体,其市场需求量也是居高不下,C++ 程序员也是热门岗位之一,此二者的比较也常是热点话题,例如新学者常困惑的问题之一 —— 后端开发学 Java 好还是学 C++ 好。读完本文后,我们可以从自身情况、未来的发展,岗位需求量…

【JVM系列】关于静态块、静态属性、构造块、构造方法的执行顺序

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Java算法 空间换时间(找重复)

一、算法示例 1、题目:题目:0-999的数组中,添加一个重复的元素,打乱后,找出这个重复元素 代码示例: package com.zw.study.algorithm; import java.util.*; public class XorTest {public static void mai…

Vue报错 Cannot read properties of undefined (reading ‘websiteDomains‘) 解决办法

浏览器控制台如下报错: Unchecked runtime.lastError: The message port closed before a response was received. Uncaught (in promise) TypeError: Cannot read properties of undefined (reading websiteDomains) at xl-content.js:1:100558 此问题困扰了…

可持续发展:制造铝制饮料罐要消耗多少资源?

铝制饮料罐是人们经常使用的日常用品,无论是在购物、午休还是在自动售货机前选择喝什么的时候,很少有人会想知道装他们喝的饮料的罐子到底是如何制成的,或者这些铝罐的原材料是如何进出的。 虽然有化学品和一些合金进入铝饮料罐制造过程或成为…

【VSCode调试技巧】Pytorch分布式训练调试

最近遇到个头疼的问题,对于单机多卡的训练脚本,不知道如何使用VSCode进行Debug。 解决方案: 1、找到控制分布式训练的启动脚本,在自己的虚拟环境的/lib/python3.9/site-packages/torch/distributed/launch.py中 2、配置launch.…

【Qt常用控件】—— 输入类控件

目录 1.1 Line Edit 1.2 Text Edit 1.3 Combo Box 1.4 Spin Box 1.5 Date Edit & Time Edit 1.6 Dial 1.7 Slider 1.1 Line Edit QLineEdit是Qt中的一个控件,用于 接收和显示单行文本输入。 核心属性 属性 说明 text 输⼊框中的⽂本 inputMask 输⼊…

Science Robotics 美国斯坦福大学研制了外行星洞穴探测机器人

月球和火星上的悬崖、洞穴和熔岩管已被确定为具有地质和天体生物学研究理想地点。由于其隔绝特性,这些洞穴提供了相对稳定的条件,可以促进矿物质沉淀和微生物生长。在火星上,这些古老的地下环境与火星表面可能适合居住时几乎没有变化&#xf…

JavaEE 初阶篇-深入了解网络通信相关的基本概念(三次握手建立连接、四次挥手断开连接)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 网络通信概述 1.1 基本的通信架构 2.0 网络通信三要素 3.0 网络通信三要素 - IP 地址 3.1 查询 IP 地址 3.2 IP 地址由谁供应? 3.3 IP 域名 3.4 IP 分…

大模型接口管理和分发系统One API

老苏就职于一家专注于音视频实时交互技术和智能算法的创新企业。公司通过提供全面的 SDK 和解决方案,助力用户轻松实现实时音视频通话和消息传递等功能。尽管公司网站上有详细的文档中心,但在实际开发中,仍面临大量咨询工作。 鉴于此&#x…

知识图谱嵌入领域的重要研究:编辑基于语言模型的知识图谱嵌入

今天,向大家介绍一篇在知识图谱嵌入领域具有重要意义的研究论文——Editing Language Model-based Knowledge Graph Embeddings。这项工作由浙江大学和腾讯公司的研究人员联合完成,为我们在动态更新知识图谱嵌入方面提供了新的视角和方法。 研究背景 在…

Linux安装MongoDB超详细

Linux端安装 我们从MonDB官网下载Linux端的安装包,建议下载4.0版本 打开虚拟机,在虚拟机上安装传输工具lrzsz,将下载好的.tgz包拖到虚拟机当中,拖到/usr/local/mongoDB目录下, [rootserver ~]# yum install -y lrzsz [rootser…

如何使用 Vercel 托管静态网站

今天向大家介绍 Vercel 托管静态网站的几种方式,不熟悉 Vercel 的伙伴可以看一下之前的文章:Vercel: 开发者免费的网站托管平台 Github 部署 打开 Vercel 登录界面,推荐使用 GitHub账号 授权登录。 来到控制台界面,点击 Add New …

四川古力未来科技抖音小店:科技新宠,购物新体验

在当下数字化、智能化的时代,电商平台如雨后春笋般涌现,其中不乏一些富有创新精神和实力雄厚的科技企业。四川古力未来科技有限公司就是其中的佼佼者,其抖音小店更是凭借其独特的魅力和优质的服务,赢得了广大消费者的青睐。 一、科…