【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

使用 Axon 框架实现一个 CQRS 示例应用

  • 2016-02-01
  • 本文字数:1335 字

    阅读完需:约 4 分钟

命令查询职责分离(CQRS)是构建软件系统的一种方式,它的思想是将对状态的查询部分与改变状态的部分进行分离。 Axon 框架是一个基于 Java 实现的 CQRS 框架,提供了对大多数重要构建块的实现,例如聚合、命令与事件总线、以及 repository,以帮助开发者在构建应用程序时使用 CQRS 架构模式。 Dadepo Aderemi 最近撰写了一系列博客文章,讲解了 CQRS 的概念,并通过一个小型的 CQRS 演示应用,探索Axon 框架所提供的各种构建块

Aderemi 是来位于阿姆斯特丹的 Trifork 公司的一位软件开发者,对于他来说,CQRS 中的命令这方面最重要的部分包括:

  • 命令(Command),它负责捕获用户的意图,即接下来应该发生什么事。在 Axon 中,命令被实现为 POJO 对象,因而无需实现任何接口。
  • 命令处理器(Command Handler),它负责执行所发送的命令。在 Axon 中,可以选择通过实现某个接口的方式创建它,也可以通过注解符实现。
  • 命令总线(Command Bus),负责将命令传递给对应的命令处理器。Axon 总共提供了四种实现方式,Aderemi 选择了一种简单的同步总线用于传递命令。另一种实现方式是通过异步总线以异步的方式处理命令。

Aderemi 指出,在 CQRS 的相关讨论中经常会出现源于领域驱动设计(DDD)的一些概念,他相信对于 DDD 的基本了解有助于 CQRS 的学习。这其中有两个重要的概念,一是聚合(Aggregate),这是一种逻辑性的概念,它定义了一个领域对象的集合,处于该集合中的对象具有原子性,表现为一个内聚的总体。另一个概念是聚合根(Aggregate Root),它指的是聚合中的某个实体,它内含其它实体对象,并负责确保整个聚合始终处于一致的、内聚的状态。在 Axon 中提供了一个 _AbstractAggregateRoot_ 类型,可以通过扩展它实现一个聚合根。

在查询这一方面,最重要的部分包括:

  • 领域事件(Domain Event),它表示发生于过去的某事,由领域中的状态变化、命令及命令处理器中所初始化的变化所创建。
  • 事件总线(Event Bus),它负责将事件传递给查询方。Axon 中提供了多种实现方式,Aderemi 选择了一种较简单的实现。
  • 事件处理器(Event Handler),它负责侦听事件,通过事件中所包含的信息,在查询方反应出应用程序的状态。在 Axon 中,可通过注解符定义事件处理器。

通过事件溯源(Event Sourcing),所有对状态造成变化的事件都被保存下来,而不是保存应用当前的状态。可以通过对于原始状态重演所有已发生事件的方式获取当前状态。Axon 对于EventStore 接口提供了多种实现方式,包括NoSQL 和关系型数据库的实现。在Aderemi 的演示应用的后期版本中,他实现了一个事件溯源策略,能够将事件持久化至文件中。

Axon 还提供了一个测试的基础设施,它的实现方式遵循行为驱动开发(BDD)的思想。Aderemi 在他的演示应用中包含了测试代码。他特别指出,该测试基础设施所关注的是作为对所发送的命令的回应而发布的事件,这样可以避免产生对某个API 实现的依赖。

Aderemi 已将他的演示应用 exploringCQRSwithAxon 发布在 GitHub 上。他正准备在一篇总结性的文章中表达他对于 CQRS 这种架构,以及 Axon 如何帮助使用者实现这一架构的观点。

Axon 框架是由同样任职于 Trifork 的 Allard Buijze 所开发的一套开源产品,计划在 2016 年第一季度推出第三个版本。

查看英文原文: CQRS Example Using Axon Framework

2016-02-01 18:009294
用户头像

发布了 428 篇内容, 共 172.0 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

冗余是什么意思?与双机热备有什么区别?

行云管家

高可用 冗余 双机热备

火山引擎ByteHouse助力中国地震台网中心,快速构建一站式实时数仓

字节跳动数据平台

大数据 Clickhouse 数据平台

java开发培训机构怎样选择?

小谷哥

前端培训学习前景怎么样?

小谷哥

选择前端培训怎么学?

小谷哥

一文搞清商旅酒店数据治理——酒店数据问题分析及治理方案

元年技术洞察

数据中台 数据 数据治理 企业数字化转型 商旅系统

TAE-MatrixOne云原生事务与分析引擎

MatrixOrigin

数据库事务 云原生数据库 国产数据库 MatrixOrigin MatrixOne

CompletableFuture实现异步转同步

FunTester

学习web前端培训怎么样?

小谷哥

R2M分布式锁原理及实践

京东科技开发者

redis 框架解析 企业号 2 月 PK 榜 r2m 分布式锁原理

Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题

阿里巴巴中间件

Java 阿里云

如何使用 Terraform 在亚马逊云科技上创建 ShardingSphere Proxy 高可用集群?

亚马逊云科技 (Amazon Web Services)

数据库 负载均衡 存储

一个成熟的WMS(仓库管理系统)应该具备的那些功能

SAP虾客

功能 WMS系统 成熟的WMS系统

re:Invent 开发者最喜爱产品票选榜单出炉!快来探索高光产品~

亚马逊云科技 (Amazon Web Services)

使用插件扩展服务网格

Flomesh

插件 服务治理 服务网格 Pipy

Studio One2023永久和谐版水果编曲工具使用教程

茶色酒

Studio One 5 Studio One2023

实战分享 | 金融数据采集报送平台实践

葡萄城技术团队

防sql注入原理浅析

追赶者

SQL注入

杭州银行牵手火山引擎数智平台,要既“好”又“快”地完成数字化升级

字节跳动数据平台

大数据 金融 银行

邀请 | Flink Batch 社区开发者会议

Apache Flink

大数据 flink 实时计算

个人总结18条心法奉上,手把手带你阅读开源项目的源码!

程序员小毕

源码 程序员 面试 程序人生 架构师

带你读论文丨S&P21 Survivalism: Living-Off-The-Land 经典离地攻击

华为云开发者联盟

人工智能 华为云 论文 企业号 2 月 PK 榜 华为云开发者联盟

如何让OpenHarmony编译速度“狂飙”

离北况归

OpenHarmony

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性

离北况归

OpenHarmony

TiCDC 源码阅读(四)TiCDC Scheduler 工作原理解析

PingCAP

数据库 开源 TiDB 源码解读

sun4.0泰山众筹模式项目系统开发技术讲解放哪(Demo)

I8O28578624

开心档-软件开发入门之MongoDB 覆盖索引查询

雪奈椰子

mongodb Ppython 操作mongodb库 开心档

开心档-软件开发入门之MongoDB 创建集合

雪奈椰子

mongodb 开心档

9种跨域方式实现原理

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

杭州云堡垒机采购选择哪家好?为什么?

行云管家

云计算 网络安全 数据安全 云堡垒机

零基础自学网络安全/网络渗透攻防路线学习方法【建议收藏】

网络安全学海

黑客 网络安全 安全 信息安全 渗透测试

使用Axon框架实现一个CQRS示例应用_语言 & 开发_Jan Stenberg_InfoQ精选文章