写点什么

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

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

关注

评论

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

拍乐云创始人赵加雨:沉浸式音视频加持数智化未来世界

拍乐云Pano

资深大牛带你了解源码!最新Android面试题整理

欢喜学安卓

android 程序员 面试 移动开发

使用PyTorch构建神经网络模型进行手写识别

Shirakawa

神经网络 机器学习 深度学习 PyTorch 手写识别

中台的前世今生

涛哥 数字产品和业务架构

企业架构 中台架构 中台的由来

专访融云 CTO 任杰:构建通信云全能力

融云 RongCloud

FastApi-06-请求体-3

Python研究所

FastApi 8月日更

阿里顶级大佬整理出十六个专题的Java面试指南,金九银十不用愁!

Java 编程 架构 面试 架构师

强推!华为内部都在用的783页大数据处理系统:Hadoop源代码pdf

Java 编程 架构 面试 架构师

PostgreSQL正强势回归!

数据库 大数据 时序数据库 tsdb 数据智能

第一次凡尔赛,字节跳动3面+腾讯6面一次过,谈谈我的大厂面经

Java~~~

Java 面试 微服务 多线程 架构师

如何洞察出推荐的关键时刻

石云升

推荐 用户体验 体验设计 8月日更

Python RPC 不会?不妨看看这篇文章

星安果

Python RPC RPC架构

一周信创舆情观察(7.26~8.1)

统小信uos

一个算法“拿下”两个榜单!爱奇艺ICCV 2021论文提出人手三维重建新方法

爱奇艺技术产品团队

vr 论文 ICCV2021 高精度三维重建

101道经典JavaScript面试题总结(附答案,建议收藏)

前端依依

面试 大前端 JavaScrip

架构实战营模块四作业

maybe

维护数据隐私和增强竞争优势的秘密

九河云安全

字节跳动Android面试:2021Android大厂面试知识分享

欢喜学安卓

android 程序员 面试 移动开发

人在年轻的时候,最核心的能力是什么?

非著名程序员

认知提升 个人提升 提升自我 8月日更

Linux内核分析学习路线总结(内核人员必看)

Linux服务器开发

操作系统 Linux内核 内核源码 内核开发 驱动开发

5 分钟,快速入门 Python JWT 接口认证

星安果

Python JWT

Github首次开放,一天遭狂转 50w 次!阿里内部不外传的 100 万字 Java 面试手册!

Java 程序员 架构 面试 计算机

摘下手机赛场的夏季“金牌”,荣耀的“飞人之路”

脑极体

贝壳找房基于StarRocks构建全新统一的极速OLAP平台实践

StarRocks

数据库 数据分析 OLAP StarRocks

最全总结 | 聊聊 Python 数据处理全家桶(存储过程篇)

星安果

Python 数据库

镜像是什么意思?分类有哪些?

行云管家

网络安全 镜像 堡垒机 云厂商

开放搜索电商行业模版驱动业务增长实践

阿里云大数据AI技术

云计算以及云计算周边词概念简单介绍-行云管家

行云管家

云计算 服务器 云服务

从关门“振动”说起,在这部剧本杀综艺里,爱奇艺隐藏了多少技术“小心机”

爱奇艺技术产品团队

综艺节目 互动视频技术 爱奇艺

现有市值管理机器人|交Y机器人系统源码搭建

Geek_23f0c3

做市机器人 去中心化市值管理机器人

云原生时代,腾讯如何做好容器安全体系建设?

腾讯安全云鼎实验室

腾讯云 容器

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