软件架构中的事件溯源与相关设计模式
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 与
超级会员免费看
订阅专栏 解锁全文
232

被折叠的 条评论
为什么被折叠?



