DDD笔记3:战术设计(运营域)
2023-03-19 本文已影响0人
王侦
1.环境和周边系统说明
上下文交互:
内部鉴权:
建模工具
- 便利贴
- Miro
- draw.io / processon
云:
- 云主机
- 消息队列
- 大数据处理和可视化
2.领域事件
2.1 领域事件为什么重要
领域事件为什么重要
- 领域事件能够驱动建模
- 领域事件和很多重要思想相关
CQRS
Event Sourcing:事件溯源 - 领域事件和大数据处理和分析相关
CQRS:
- 就是把读模型和写模型分开
- 读写模型之间的数据同步通过领域事件
CQRS
2.2 什么是领域事件
领域中发生的任何领域专家感兴趣的事情。
领域事件一般由聚合产生(不是绝对的)。
领域事件不是技术概念。
2.3 领域事件的基本属性
事件命名和基本属性
- 命名方法:名称 + 动词的过去完成时 OrderCreatedEvent
- 事件ID
- 产生时间
2.4 领域事件的发布和订阅方式
发布和订阅方式
- 外部系统
API定向通知;
API定时拉取;
消息队列; - 内部系统
观察者模式;
数据库流水;
消息队列;
2.5 领域事件的存储
事件存储
- 直接使用消息中间件存储
冗余机制
做好备份 - 基于数据库
分布式
按时间分区
2.6 事件处理的要求
事件处理的要求
- 顺序性
聚合ID
存储分片
消费分组 - 幂等性(代替分布式事务)
状态判断或去重
2.7 领域事件和大数据分析
3.事件风暴建模法
3.1 什么是事件风暴建模法
一种协作式的对复杂业务领域进行探索的讨论形式。
一种灵活易调整的轻量级的适用于DDD的建模方法。
3.2 事件风暴的应用场景
应用场景
- 评估已有业务线的健康度并发现优化点
- 探索一个新业务模型的可行性
- 设想为各个参与方能带来最大利益的新服务
- 设计整洁的可维护的软件以支持快速推进的业务
3.3 事件风暴的开展形式
核心词汇
- 领域事件
- 聚合
- 决策命令
- 角色
- 读模型
- 策略
- 外部系统
- 问题/热点
组织会议
- 产品经理
- 领域专家
- 研发人员
准备工具
- 便利贴
- 白板/纸
- 胶水/磁力贴
- 笔
3.4 事件风暴的流程和构成元素
流程:
- 列出主要领域事件
- 收集关注点和问题
- 通过命令深入领域
- 找到聚合
- 找出读模型
- 策略
- 外部系统
事件风暴的几个任务
- Big Picture
- 业务处理流程
- 软件设计
高效事件风暴的注意事项
- 首先关注学习和倾听
- 谈话和例子很关键
- 锚定到具体的业务用例
- 澄清模糊概念
4.使用事件风暴建模法对运营域建模
领域事件
- 售卖机信息已录入(运营人员,录入售卖机信息)
- 点位已创建(运营人员,创建点位)
- 投放订单已创建(运营人员,创建投放订单)
- 投放订单已完成(外部系统:ERP)
- 库存计划已创建(运营人员,创建库存计划)
- 配送订单已创建(定时调度,创建配送订单)
- 配送订单已完成(外部系统,配送中台)
聚合
- 售卖机信息
- 点位
- 投放订单
- 库存计划
- 配送订单
读模型:
- (配送订单)库存计划、售卖机信息、售卖机商品库存信息
- (库存计划)点位信息、商品信息、销售报表
- (投放订单)点位信息、售卖机信息
5.防腐层的构建
防腐层的作用:
- 防止上游上下文的复杂和混乱扩展到下游上下文
VendingMachineInstallOrder
DevicePurchaseService售卖机投放(采购)服务
DevicePurchaseServiceImpl适配层
6.事件框架的实现和云上测试环境部署
事件框架
- DomainEvent
- DomainEventBus
- DomainEventHandler
两个待解决问题
- 事件存储
Kafka
一致性问题,Kafka也支持回滚,也可以放到最后 - 事件顺序
分组排序,提高并发性
7.使用阿里云大数据服务实现经营数据分析
7.1 大数据处理分析和DDD的关系
读模型大部分是由大数据处理系统生成的,比如销售报表。
7.2 整体流程和架构
7.3 数据生成
locust
7.4 数据集成和计算
7.5 数据可视化
Quick BI