BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Jan Stenberg 关注 34 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2016年2月2日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

命令查询职责分离(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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT