写点什么

使用 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:009396
用户头像

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

关注

评论

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

《机器人流程自动化能力评估体系 第1部分:系统和工具》行标发布

王吉伟频道

RPA 机器人流程自动化 信通院 超自动化 行业标准

海外云手机的三大实用性

Ogcloud

云手机 海外云手机

华为云医疗智能体eiHealth的高性能--AI助力医疗智慧化升级

华为云PaaS服务小智

人工智能 医疗 华为云

BAT程序员常用的开发工具,建议收藏!

快乐非自愿限量之名

腾讯 阿里 开发工具 BAT

优化-Spring Boot项目服务端接口超时设置

alexgaoyh

Spring Boot Callable接口 @Transactional 接口超时

构建智算时代的云原生应用平台,2023 云原生产业大会,阿里云在这里!

阿里巴巴云原生

阿里云 容器 云原生

Hologres V2.1版本发布,新增计算组实例构建高可用实时数仓

阿里云大数据AI技术

SHQ Response 重新定义网络风险可视化与协作规则

财见

Peplink 成为首家授权 Starlink 技术服务商

财见

数据安全应急响应政策汇总:一份从无到有的应急预案实战指南(附下载)

极盾科技

金融行业首个海量数据处理技术报告发布,“五化”技术助力金融数据潜能释放

腾讯云大数据

大数据

国内大模型打假胜诉第一案;苹果取代三星成为 2023 年智能手机销售冠军丨 RTE 开发者日报 Vol.128

声网

独立站运营应该知道的十佳 WordPress SEO 插件

九凌网络

祝贺!我的同事丁宇获“2023 年度云原生产业领军人物”荣誉称号

阿里巴巴云原生

阿里云 云原生

试用活动 300上车 年中大促

开源物联卡管理平台-设备管理

物联网 IoT eSIM安全 java 技术提升

阿里云云原生助力安永创新驱动力实践探索

阿里巴巴云原生

阿里云 云原生

如何搭建企业级知识图谱系统

悦数图数据库

图数据库

游戏字体渲染

游戏开发 计算机图形学 渲染 字体

云边协同的 RTC 如何助力即构全球实时互动业务实践

阿里巴巴云原生

阿里云 云原生

JNPF低代码开发平台总体架构介绍

互联网工科生

软件开发 低代码 JNPF

华为发布2024数据中心能源十大趋势

财见

IPQ6010 and IPQ8072:OFDMA support in Wifi6 Solution

wallyslilly

IPQ6010 IPQ8072

阿里云云原生专场精彩内容集锦丨2023 云原生产业大会

阿里巴巴云原生

阿里云 云原生

首个云原生、分布式、全栈国产化银行核心业务系统投产上线 XSKY 助力构建存储基础设施

XSKY星辰天合

Python程序员常用的IDE和其它开发工具

不在线第一只蜗牛

Python ide 编程语言 开发语言

阿里云 ACK One 新特性:多集群网关,帮您快速构建同城容灾系统

阿里巴巴云原生

阿里云 容器 云原生

15款Java程序员必备的开发工具

快乐非自愿限量之名

Java jdk web开发

ETLCloud详解,如何实现最佳实践及问题排查

RestCloud

ETL 数据集成

部署SD-WAN需要哪些设备和软件?

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商 异地组网

如何使用Postman导入Swagger API文档

Liam

后端 Postman 接口文档 API swagger

Pixels:重新定义游戏体验的区块链农场游戏

Footprint Analytics

区块链游戏 链游 Pixels

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