5、软件架构中的事件溯源与相关设计模式

软件架构中的事件溯源与相关设计模式

1. 事件溯源(ES)概述

用户与领域模型交互时,会感觉应用遵循传统的面向对象范式,认为对象属性会随时间变化,且自身操作直接导致这些变化。然而,应用隐藏了对象模型既是事件序列的生成器又是投影这一事实。

事件溯源相较于传统对象模型具有诸多优势,与所有不可变架构一样,它提高了可扩展性和可审计性。此外,它还能根据事件流完全重建对象。当修复缺陷或添加功能时,应用可丢弃缓存的领域模型版本,用新代码重新构建。而且,基于事件溯源的应用能回溯时间,仅重放部分事件序列,查看对象过去的状态,为用户提供强大的时间分析能力。

实践中,事件溯源常与命令查询职责分离(CQRS)和领域驱动设计(DDD)结合使用,但这并非强制要求,不同实现方式也不尽相同,有人只将 CQRS 与 ES 结合,有人则只将 DDD 与 ES 结合,这种架构决策会影响应用将不可变记录投影为可变对象的方式。

2. 命令查询职责分离(CQRS)

2.1 CQRS 原理

CQRS 扩展了面向对象的命令查询分离(CQS)原则。Bertrand Meyer 将命令和查询定义为不同类型的方法,命令用于修改对象,查询用于返回对象信息。CQS 在方法层面进行区分,而 CQRS 将这种区分扩展到对象层面,遵循单一职责原则,部分对象负责发出命令,部分负责发出查询。

在 CQRS 中,命令负责改变系统状态,查询请求当前状态信息。命令和查询路径不同,常与不同架构组件交互。命令通常是异步的,查询通常是同步的,很多实现中,它们操作不同的数据存储。

2.2 CQRS 与 ES 结合

当 CQRS 与

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值