# DDD事件风暴工作坊

# 事件风暴的神奇魔力 🌪️💼✨

大家快来体验一种神奇的分析方法——事件风暴!它不仅能让你玩转复杂的业务领域,还能与团队一起挖掘出业务中的各种元素,如事件、命令、参与者、规则、聚合等,将它们绘制成一张张精美的图表,让你轻松洞察全貌 🌟🔍📊。

在事件风暴的魔法指引下,你将进入业务领域的探索之旅。首先,我们聚焦于事件,发掘业务中的关键事件,这些事件是业务发展的驱动力,是我们分析的起点 ⚡🚀💡。接着,我们捕捉命令,明确业务中的各种操作和指令,了解业务流程的脉络和关键路径 📝👥🔐。

然后,我们聚集参与者,描绘业务中的各种角色和参与方,了解他们之间的互动关系和职责分工 🤝👤👥。同时,我们还需要识别规则,探寻业务中的各种规范和限制条件,以便我们在分析过程中能够更加准确地把握业务的本质和要求 📏🔒✅。

最后,我们汇聚聚合,整合业务中的各个要素,形成一个完整而有机的图景,让复杂的业务变得一目了然。通过漂亮的图表呈现,我们能够更好地理解业务的结构和流程,做出准确的决策和规划,释放出业务领域的无限潜能 💼🌈🔓。

# 打造灵活稳定的软件架构 🌪️💡💻

它能够帮助你和团队更好地理解业务、达成共识,发现业务的亮点和隐患,并设计出更适合业务的软件架构。与此同时,事件风暴还基于DDD(领域驱动设计)的概念,这是一种流行而高效的软件开发方法,能够使你的软件更灵活、更稳定、更易维护 🌟🚀💻。

通过事件风暴,你可以与团队共同投入业务分析的过程中。它为你提供了一个全景的视角,让你深入了解业务的各个方面。通过发现关键事件,你能够洞察业务的核心驱动力,理清业务逻辑和关键路径 📈🔍💡。同时,借助命令和参与者的明确,你可以描绘出业务流程中的各种操作和角色,促进团队间的协作与沟通 📝👥🤝。

而基于DDD的概念,事件风暴不仅能够帮助你理解业务,还能指导软件架构的设计。DDD强调以领域为核心,将业务需求和软件设计紧密结合。通过事件风暴,你能够发现业务的核心概念和边界,构建出更加灵活、稳定和可扩展的软件架构,提升开发效率和维护性 🏗️💻🔧。

事件风暴和DDD的结合,不仅是业务分析的有力工具,也是软件开发的加速器。它帮助你从整体的角度思考业务和软件设计,打造出更符合业务需求的软件系统。在小红书上搜索"事件风暴"和"领域驱动设计",探索这些强大工具背后的无限可能,为你的业务和软件架构注入新的活力和创造力!💪💡💻

# 👉事件风暴怎么做?👈

主要有以下几步

  • 事件风暴:

    它将带领我们进入一个宽敞的屋子,召集项目中的关键参与者,展开一场激动人心的会议。在这里,业务专家首先介绍核心业务和主要业务场景,参与者们积极参与讨论。每个参与者根据自己对业务的理解,寻找业务过程中具有业务价值的事件,并将它们写在橙色便利贴上。然后,每个参与者将自己的事件贴到白板上,并按照事件发生的时间顺序从左到右进行排序,去除重复的事件 📝🔍🧡。

  • 命令风暴:

    从已发现的事件中倒推出相关的命令,将发出命令的决策写在蓝色便利贴上。这些决策贴在事件的左侧,因为某些决策可能会触发多个事件。同时,从这些决策出发,我们发现了决策参考的读模型(紫色便利贴)和触发决策的角色(黄色便利贴)。

  • 寻找聚合:

    在命令风暴的结果中,我们将寻找聚合的线索,用大黄色便利贴标记它们。聚合保留了与决策和事件相关的信息。通过划定边界,我们找到了限界上下文,并建立起它们之间的地图,用U/D标记上游和下游的关系。

  • 持续探索:

    然而,探索的旅程并未止步于此。我们将持续讨论,演进上下文映射图。从上下文出发,我们自然而然地实现了微服务的划分。这种持续的探索过程将引领我们走向更加精确的微服务设计和架构,使我们的软件系统更加灵活、可维护、稳定 🌟🏗️💻。

# 事件风暴

  • 领域专家介绍业务
  • 参与者可以任意提问
  • 参与者可以根据自己对业务的理解,将领域事件卸载橙色即时贴上
  • 每个即时贴一个事件
  • 事件采用“XX已XX”的格式,如:“订单已创建”

推荐看板工具:在线看板工具 (opens new window)

以下使用电商系统做演示:

  • 便利贴横向为时间线,表示事件的发生顺序,但是纵向的便利贴并没有特定的含义,只是为了方便排版和分组。
  • 纵向的便利贴可以根据业务场景和逻辑进行分组,比如按照参与者或聚合进行分类。

# 命令风暴

  • 列出事件后,在事件的基础上,找出动词与主语

  • 我们在事件风暴的过程中,是事件完成的动作,还缺少"动词""主语"
  • 我们为事件添加"动词" ,其实就是所谓的命令。
  • 除此之外,我们还需要找到"主语",包括角色外部系统时间

# 寻找聚合

  • 对命令和事件进行划分,找到聚合边界
  • 通过业务上统一概念,识别出分布在时间轴不同位置的同一个聚合
  • 利用persona帮助判断聚合
  • 利用聚合定义进行确认
  • 对聚合使用大黄色即时贴进行标记

在探索的最后阶段,我们需要识别不同的限界上下文,它们将为我们揭示业务的核心聚合。在这个过程中,我们可以发现商品、购物车、订单、支付、物流等聚合,并将它们划分为独立的限界上下文。我们可以根据业务相关性和通用语言来进行划分,以准确反映业务需求和逻辑关系 🌟🔬📝。

例如,我们发现商品和购物车属于同一个限界上下文,因为它们都涉及到商品信息和库存信息的管理与操作。同样地,订单和支付也可以划分到同一个限界上下文中,因为它们涉及到订单状态和支付状态的处理与流转。通过这样的划分,我们能够更好地管理和理解各个聚合的边界和职责。

在标注限界上下文之后,我们还可以展示不同限界上下文之间的依赖关系。举个例子,订单服务可以被视为支付服务的上游,因为订单服务在生成订单号之后才能调用支付服务完成支付操作。通过清晰地标注依赖关系,我们可以更好地把握各个限界上下文之间的交互和协作关系,确保系统的稳定性和可扩展性 💡🔗📊。

# 限界上下文

  • 根据业务相关性和通用语言划分:您可以根据业务领域中的不同子域,以及每个子域的主题,来划分限界上下文。每个限界上下文内的概念和模型都应该符合该子域的通用语言,而与其他子域无关。您可以通过一些问题来检验一个概念是否属于某个限界上下文,例如:是否都符合该主题的通用语言的要求?是否与该主题无关?是否更符合该主题的通用语言?是否是该主题的核心通用语言?
  • 根据业务部门或工作组织划分:您可以参考您的组织结构,以及不同部门或团队的职责和协作方式,来划分限界上下文。一般来说,每个部门或团队都会有自己专注的业务领域和通用语言,这可以作为限界上下文的边界。您可以通过沟通和协商,来确定不同部门或团队之间的依赖关系和交互方式。
  • 根据关键战略或产品愿景划分:您可以根据您的组织或项目的关键战略或产品愿景,来划分限界上下文。您可以识别出哪些子域是核心域,即对您的战略或愿景最重要的部分,然后将其划分为一个单独的限界上下文。其他子域则可以根据其对核心域的支撑程度,划分为支撑子域或通用子域。

根据业务部门或工作组织划分

在电商平台的事件风暴工作坊中,我们将根据业务部门或工作组织的角色,进行限界上下文的划分。

首先是商品限界上下文,由商品部门负责。这个限界上下文涵盖了与商品相关的各种概念和模型。在这里,我们可以追溯商品、分类、属性、规格、库存、价格等元素的纷繁细节。商品部门将负责管理、展示和维护这些概念和模型,确保电商平台上商品信息的完整性和准确性 🌟📦💎。

接下来是订单限界上下文,由订单部门负责。这个限界上下文涵盖了与订单相关的概念和模型。在这个舞台上,我们可以看到订单、购物车、优惠券、发票、退款等元素的精彩表演。订单部门负责创建、支付、取消、退换等操作,确保顾客的订单体验顺畅而可靠 📝💸📑。

最后是物流限界上下文,由物流部门负责。这个限界上下文展现了与物流相关的各种概念和模型。在这里,我们可以欣赏到物流单、物流公司、物流状态、物流轨迹等元素的协同演奏。物流部门负责配送、跟踪、签收等物流环节,确保商品的准时送达和顾客的满意度 🚚📦📚。

键战略或产品愿景划分

在音乐平台的事件风暴工作坊中,我们可以根据关键战略或产品愿景,进行限界上下文的划分。

首先是音乐限界上下文,这是您的核心域,也是关键战略或产品愿景的核心部分。这个限界上下文涵盖了与音乐相关的各种概念和模型。在这个舞台上,我们可以感受到歌曲、歌手、专辑、歌单、播放器等元素的绚丽演奏。音乐限界上下文负责音乐内容的管理、品质的提升和用户体验的优化,是您的核心竞争力所在 🎶🎤📀。

接下来是社区限界上下文,这是您的支撑子域,为关键战略或产品愿景提供辅助支持。这个限界上下文涵盖了与社区相关的各种概念和模型。在这个舞台上,我们可以感受到用户、评论、动态、关注、私信等元素的活力呈现。社区限界上下文致力于构建用户间的交流、互动和分享平台,为音乐平台增加用户粘性和口碑效应 🙌💬📱。

最后是广告限界上下文,这是您的通用子域,作为关键战略或产品愿景的非必要部分。这个限界上下文涵盖了与广告相关的各种概念和模型。在这个舞台上,我们可以感受到广告主、广告位、广告内容、广告收益等元素的商业运营和盈利模式。广告限界上下文为音乐平台提供了可借鉴和引入的通用解决方案,为您的商业化策略增添了灵活性和潜力 💼📈💰。

上次更新: 9/11/2023,