Cheeper:《CQRS By Example》一书的参考代码开源实现


命令-查询职责分离 (CQRS) 是一种架构风格,用于开发易于维护并提供高性能的应用程序。CQRS 基于六边形架构,其主要特征是将域模型拆分为读取和写入操作,以最大限度地提高语义、性能和可扩展性。双方的编排采用多种策略处理,异步消息传递是最通用的一种。

CQRS 的所有好处是什么?有什么缺点?在哪些情况下值得应用它?它与六边形架构有何关系?我们如何正确实现写入模型和读取模型?我们如何保持双方同步?迈向事件溯源的以下步骤是什么?本书将回答所有这些问题以及更多问题,并通过大量实际示例进行指导。

内容摘要
第 1 章:CQRS 和领域驱动设计
什么是领域驱动设计?它在复杂系统中扮演什么角色?值得学习和探索吗?开发人员在进入其中时需要了解哪些主要概念?CQRS 与领域驱动设计有何关系?

第 2 章:CQRS 之旅
CQRS 的基础是什么?创建 CQRS 的背景是什么?CQRS 解决了什么问题?CQRS 在哪些情况下有用,在哪些情况下没有效果?

第 3 章:CQRS 剖析
CQRS 的主要组成部分是什么?什么是命令端?什么是查询端?保持读取模型和写入模型同步的总体策略是什么?有哪些实际用例、它们的主要组成部分和信息流?

第 4 章:命令端和写入模型
什么是命令?命令处理程序呢?为什么它们很重要?命令总线的作用是什么?什么是异步命令和同步命令?

第 5 章:查询端和读取模型
什么是查询?什么是查询处理程序?我们需要查询总线吗?什么是读取薄层?一个好的阅读模型有什么特点?我可以拥有多少个读取模型?什么是投影?

第 6 章:同步写入和读取模型
我必须有哪些选项来同步写入模型和读取模型?我需要同步它们吗?我可以使用消息以外的策略吗?消息传递是最好的方法吗?

第 7 章:全貌
我怎样才能将以前学过的所有概念付诸实践?简单用例需要多少异步步骤?复杂的有多少?

第 8 章:优化和边缘案例
如何优化 Projections 的构建时间?处理事件时我将面临哪些挑战?如何从重复或丢失的消息中恢复?

第 9 章:CQRS 和事件溯源
使用 CQRS 需要考虑哪些启发式方法?我如何进入事件溯源?决定我是否应该在 CQRS 停止或继续前进的标准是什么?

第 10 章:演示时间
如何演示多个用例,详细了解每个步骤中发生的情况?如何与应用程序交互?如何使用同步和异步命令?我如何消费事件?我如何使用 Projections?

代码项目和示例
我们喜欢有详细的代码示例,以便人们可以清楚地看到我们的建议和指南。在本书中,整个内容由 Twitter 克隆应用程序 Cheeper 指导,读者将对其进行详细探索。
我们选择了 Twitter 克隆应用程序,因为它非常适合使用 CQRS 的好处。Twitter 将每个用户时间线分开存储,因此读取用户时间线是一项非常快速的操作。为了更新每个时间线,Twitter 会在发布新推文时将新推文投射到相应的关注者。一切都是异步发生的,命令(发布推文)和查询(查看时间线)是分开的,但使用事件进行协调。

详细点击标题