架构师篇-9、从事件风暴到微服务设计的落地过程

用户付款功能第二个版本的设计实现

在这里插入图片描述

单一职责原则(SRP)

  • 软件系统中的每个元素只完成自己职责内的事,将其他的事交给别人去做
  • “职责”通常人理解为一个事情,与该事情相关的事都是它的责任
    一个职责是软件变化的一个原因

第二次需求变更

增加VIP会员功能

  • 对VIP金卡和银卡会员进行不同的折扣
  • 在支付时为VIP会员发放福利
  • VIP会员可以享受某些特权

付款功能第三个版本的实现

在这里插入图片描述

第三个版本的领域模型

在这里插入图片描述

第三次需求变更

增加更多的支付方式

  • 支付宝支付
  • 微信支付
  • 工商银行支付
  • 民生银行支付
  • 广发银行支付
  • 招商银行支付

第四个版本的领域模型

在这里插入图片描述

付款功能第四个版本的实现

在这里插入图片描述

领域驱动架构的设计实现

在这里插入图片描述

演练领域驱动的设计过程

  • 业务分析:统一语言与事件风暴
  • 领域设计:服务、实体、值对象
  • 微服务拆分:聚合、限界上下文文与领域事件

统一语言建模

业务规则
业务流程
业务痛点
在这里插入图片描述

诊断领域模型

在这里插入图片描述

事件风暴(Event Storming)

事件风暴是一种基于工作坊的实践方法,它可以快速发现业务领域中正在发生的事件,指导领域建模及程序开发。
它是Alberto Brandolini发明的一种领域驱动设计实践方法,被广泛应用于业务流程建模和需求工程。
基本思想是将软件开发人员和领域专家聚集在一起,相互学习。
为了让学习变得更容易,该方法的工作方式类似于头脑风暴,让事件风暴变得很有趣。

事件即事实(Event as Fact)

领域事件:即领域中发生的事实(fact)
在真实世界中,当满足某个条件时,某个发起者会触发某个事件,做某个事情。
事实(fact):是指那些已经发生过的事件。
鉴于过去已经发生的事实不会发生改变,因此信息系统可以将这些事实以信息的形式存储到数据库中,即信息就是一组事实。

事件风暴会议

在这里插入图片描述

  • 事件风暴会议以完成领域模型为目标
  • 参会人员:领域专家和软件开发人员
  • 会议以探讨领域事件开始,从前往后依次梳理,以确保领域中所有事件都能覆盖
  • 项目组成员不断增加各种命令与事件,进而思考与之相关的资源、外部系统与时间
  • 识别模型中可能的聚合以其聚合根
  • 将模型分配到各个限界上下文中,构建上下文地图

案例:在线订餐系统

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题域、子域与限界上下文

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

设计模式-状态模式和策略模式

1.状态模式 1.1定义 当一个对象的内在状态改变时允许根据当前状态作出不同的行为; 1.2 适用场景 (1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态来决定其行为. (2)代码中包含了大量的与状态有关的条件语句,例如:一个操作含有庞大的多分值语句(if…

pytest测试框架pytest-random-order插件随机执行用例顺序

Pytest提供了丰富的插件来扩展其功能,本章介绍下pytest-random-order插件,随机设置pytest测试用例的运行顺序,并对随机性进行一些控制。 官方文档: https://pytest-cov.readthedocs.io/en/latest/index.html 适配版本说明&#x…

xlsx实现excel下载功能——js

import dayjs from "dayjs"; import * as XLSX from "xlsx"; import XLSXS from "xlsx-style";export function export2Excel(info: {// 文件名&#xff08;工作簿名&#xff09;title: string;// 数据data: any[] | Record<string, any>[…

Crontab命令详解:轻松驾驭Linux定时任务,提升系统效率

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 引言&#xff1a; crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件…

AI agent是什么,什么技术栈

AI agent&#xff0c;也称为会话代理或聊天机器人&#xff0c; 是一种通过文本或语音模拟人类对话的计算机程序。 它们旨在以自然且引人入胜的方式理解和响应用户输入。 AI agent 被广泛用于各种应用中&#xff0c;包括客户服务、营销、 销售和教育。 有两种主要类型的 AI agen…

软件包管理简介

windows的软件包都不能直接在windows当中安装和使用&#xff0c;好处是windows中的大部分病毒和木马对于Linux都是不可识别的。坏处是所有的软件都必须对linux单独进行软件开发。 1.软件包分类 源码包 脚本安装包 绝大多数源代码包都是使用C语言来写的。 特征是开源。 二进…

Qt开发报错:Q_INTERFACES Error: Undefined interface

1、背景 VS2019qt5.12.10 从svn拉下来的项目&#xff0c;结果报错&#xff1a; Q_INTERFACES Error: Undefined interface 之前在VS的扩展中在线安装了qt插件&#xff0c; 安装了一半&#xff0c;比较慢&#xff0c;直接强行退出了。。 后来安装了qt官网的插件。。。。 2、报…

Linux内核 -- 汇编结合ko案例之PMU获取cpu cycle技术

ARMv7汇编实现周期计数读取与清空 本文档详细描述了如何在ARMv7平台上使用汇编语言编写周期计数器读取与清空函数&#xff0c;如何在内核模块中导出这些函数供其他模块调用&#xff0c;以及如何使用Netlink接口供用户态程序进行调用。 1. 汇编函数实现 首先&#xff0c;编写…

nginx架构学习

前言 这篇文章主要记录下对nginx架构的学习记录。 架构设计 优秀的模块化设计 高度模块化的设计是Nginx的架构基础。在Nginx中&#xff0c;除了少量的核心代码&#xff0c;其他一切皆 为模块。 在这5种模块中&#xff0c;配置模块与核心模块都是与Nginx框架密切相关的&…

Pharmacy Management System v1.0 文件上传漏洞(CVE-2022-30887)

前言 CVE-2022-30887 是一个存在于 Pharmacy Management System v1.0 中的远程代码执行&#xff08;RCE&#xff09;漏洞。这个漏洞存在于 /php_action/editProductImage.php 组件中。攻击者可以通过上传一个精心制作的图像文件来执行任意代码。 漏洞详细信息 漏洞描述: Pha…

第二十三课,再识字符串

前言&#xff0c;再识字符串 字符串是我们学习python编程第一眼见到的东西&#xff0c;一行print(“hello world”)可谓是太亲切了&#xff0c;但在此之前我们对字符串的认知也仅局限于如何用单引号、双引号、三引号去定义字符串并打印&#xff0c;今天开始我们就更深入地去理…

推荐系统入门

https://github.com/LongxingTan/Machine-learning-interview/blob/main/03_system/03_ml/recommendation.md 离线层&#xff1a;不用实时数据&#xff0c;不提供实时响应&#xff1b; 近线层&#xff1a;使用实时数据&#xff0c;不保证实时响应&#xff1b; 在线层&#xff…

【大数据】StarRocks的系统架构

StarRocks 架构简洁&#xff0c;整个系统的核心只有 FE&#xff08;Frontend&#xff09;、BE (Backend) 或 CN (Compute Node) 两类进程&#xff0c;方便部署与维护&#xff0c;节点可以在线水平扩展&#xff0c;元数据和业务数据都有副本机制&#xff0c;确保整个系统无单点。…

淘宝评论数据爬取全攻略:一网打尽好评差评,轻松分析消费趋势

在大数据时代&#xff0c;淘宝评论数据如同一座金矿&#xff0c;蕴藏着消费者的直接反馈和市场趋势。作为Python爬虫工程师&#xff0c;如何高效、合法地挖掘这座金矿&#xff1f;本文将手把手教你打造一款强大的淘宝评论爬虫&#xff0c;让你在数据分析的海洋里乘风破浪。关键…

Sharding 分片配置实例

Sharding 分片配置实例 shardingRule:tables:t_order:actualDataNodes: ds${0..1}.t_order${0..1}databaseStrategy:inline:shardingColumn: user_idalgorithmExpression: ds${user_id % 2}tableStrategy: inline:shardingColumn: order_idalgorithmExpression: t_order${orde…

轻松解锁电脑强悍性能,4000MHz的玖合星舞 DDR4 内存很能打

轻松解锁电脑强悍性能&#xff0c;4000MHz的玖合星舞 DDR4 内存很能打 哈喽小伙伴们好&#xff0c;我是Stark-C~ 很多有经验的电脑玩家在自己DIY电脑选购内存条的时候&#xff0c;除了内存总容量&#xff0c;最看重的参数那就是频率了。内存频率和我们常说的CPU主频一样&…

通用管理页面的功能实现

在Windows Forms&#xff08;WinForms&#xff09;应用程序中&#xff0c;创建一个通用的管理页面通常涉及对数据的增删改查&#xff08;CRUD&#xff09;操作&#xff0c;以及一些额外的功能&#xff0c;如数据过滤、排序、导出和导入等。 先看一个仓库管理页面要素。 仓库管…

uniapp开发H5、手机APP、微信小程序 可拖动菜单按钮

ml-fab 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id18909 1、可拖拽悬浮按钮 ml-fab&#xff0c;支持自定义插槽&#xff0c;点击可展开一个图标按钮菜单&#xff0c;可随意拖拽。 2、支持自定义插槽&#xff0c;可实现自定义配置。 3、操作简单易上手。 ml-f…

同元软控受邀出席2024年工业软件与新质生产力创新发展论坛

近日&#xff0c;由广东省工业软件学会主办的“2024年工业软件与新质生产力创新发展论坛”在广州成功举办。同元软控深圳子公司副总经理周胜受邀出席&#xff0c;并作《数智驱动创新&#xff0c;科学计算与系统建模仿真加速新质生产力进化》主题演讲。 本次论坛集结工业软件界…

【IVI】CarService启动-Android13

【IVI】CarService启动-Android13 1、CarServiceImpl启动概述2、简要时序图 1、CarServiceImpl启动概述 【IVI】CarService启动&#xff1a; CarServiceHelperService中绑定CarServiceICarImpl初始化各种服务 packages/services/Car/README.md 2、简要时序图