`

axonframework

    博客分类:
  • SOA
 
阅读更多

这就是CQRS,也是axonframework的核心设计

 

在axon中,Command对象是一个自然对象,不受框架限制,Command对象和CommandHandler是一对一关系

 

Domain对象是DDD中的聚合根,Repository负责加载聚合根以及分发领域事件到事件总线上

 

Evnet Store在axon中可以用文件系统,关系数据库和非关系数据库等

2.1. Architectural Overview

CQRS on itself is a very simple pattern. It only describes that the component of an application that processes commands should be separated from the component that processes queries. Although this separation is very simple on itself, it provides a number of very powerful features when combined with other patterns. Axon provides the building block that make it easier to implement the different patterns that can be used in combination with CQRS.

CQRS(命令-查询职责分离)是非常简单的模式,它只是描述了应用程序中的命令组件应该与查询组件实行分离。(未译完,待续)

The diagram below shows an example of an extended layout of a CQRS-based event driven architecture. The UI component, displayed on the left, interacts with the rest of the application in two ways: it sends commands to the application (shown in the top section), and it queries the application for information (shown in the bottom section).

 

 

 

 

Command Handling

Commands are typically represented by simple and straightforward objects that contain all data necessary for a command handler to execute it. A command expresses its intent by its name. In Java terms, that means the class name is used to figure out what needs to be done, and the fields of the command provide the information required to do it.

The Command Bus receives commands and routes them to the Command Handlers. Each command handler responds to a specific type of command and executes logic based on the contents of the command. In some cases, however, you would also want to execute logic regardless of the actual type of command, such as validation, logging or authorization.

Axon provides building blocks to help you implement a command handling infrastructure with these features. These building blocks are thoroughly described in Chapter 3, Command Handling.

Domain Modeling

The command handler retrieves domain objects (Aggregates) from a repository and executes methods on them to change their state. These aggregates typically contain the actual business logic and are therefore responsible for guarding their own invariants. The state changes of aggregates result in the generation of Domain Events. Both the Domain Events and the Aggregates form the domain model. Axon provides supporting classes to help you build a domain model. They are described in Chapter 4, Domain Modeling.

Repositories and Event Stores

Repositories are responsible for providing access to aggregates. Typically, these repositories are optimized for lookup of an aggregate by its unique identifier only. Some repositories will store the state of the aggregate itself (using Object Relational Mapping, for example), while other store the state changes that the aggregate has gone through in an Event Store. The repository is also responsible for persisting the changes made to aggregates in its backing storage.

Axon provides support for both the direct way of persisting aggregates (using object-relational-mapping, for example) and for event sourcing. More about repositories and event stores can be found in Chapter 5, Repositories and Event Stores.

Event Processing

The event bus dispatches events to all interested event listeners. This can either be done synchronously or asynchronously. Asynchronous event dispatching allows the command execution to return and hand over control to the user, while the events are being dispatched and processed in the background. Not having to wait for event processing to complete makes an application more responsive. Synchronous event processing, on the other hand, is simpler and is a sensible default. Synchronous processing also allows several event listeners to process events within the same transaction.

Event listeners receive events and handle them. Some handlers will update data sources used for querying while others send messages to external systems. As you might notice, the command handlers are completely unaware of the components that are interested in the changes they make. This means that it is very non-intrusive to extend the application with new functionality. All you need to do is add another event listener. The events loosely couple all components in your application together.

In some cases, event processing requires new commands to be sent to the application. An example of this is when an order is received. This could mean the customer's account should be debited with the amount of the purchase, and shipping must be told to prepare a shipment of the purchased goods. In many applications, logic will become more complicated than this: what if the customer didn't pay in time? Will you send the shipment right away, or await payment first? The saga is the CQRS concept responsible for managing these complex business transactions.

The building blocks related to event handling and dispatching are explained in Chapter 6, Event Processing. Sagas are thoroughly explained in Chapter 7, Managing complex business transactions.

Querying for data

The thin data layer in between the user interface and the data sources provides a clearly defined interface to the actual query implementation used. This data layer typically returns read-only DTO objects containing query results. The contents of these DTO's are typically driven by the needs of the User Interface. In most cases, they map directly to a specific view in the UI (also referred to as table-per-view).

Axon does not provide any building blocks for this part of the application. The main reason is that this is very straightforward and doesn't differ from the layered architecture.

Figure 2.1. Architecture overview of a CQRS application

  

<!--EndFragment-->

 

 

分享到:
评论

相关推荐

    Axon Framework 使用指南中文版(V3.2)

    ### Axon Framework 使用指南知识点详解 #### 架构背景与简史 随着互联网技术的快速发展,企业对于软件项目的需求日益增长。为了使软件能够更好地适应业务的发展,软件系统的复杂度也随之提升。面对这一挑战,传统...

    Axonframework3.2中文开发指南

    axonframework官方文档翻译成中文,Axon框架是目前国外支持DDD开发最成熟的CQRS框架。

    Axon Framework 使用指南中文版(V3.2)(翻译完成度90%)

    ### Axon Framework 使用指南知识点概览 #### 一、Axon框架概述 - **定义**:Axon框架是一个全面的支持领域驱动设计(DDD)及命令查询责任分离(CQRS)模式的开发框架,旨在帮助开发者构建高度可扩展、可维护的企业...

    axonframework中文使用说明文档

    Axon Framework 是一个基于Java和JVM的开源框架,专门设计用于实现领域驱动设计(DDD)和命令查询...通过阅读"axonframework中文使用说明文档",开发者可以更深入地了解如何利用这个框架来构建高效、灵活的业务系统。

    基于spring boot,spring cloud,axon framework的领域驱动设计的-Taroco.zip

    《基于Spring Boot、Spring Cloud与Axon Framework的领域驱动设计实践——Taroco项目解析》 在现代企业级应用开发中,Spring Boot和Spring Cloud已成为构建微服务架构的标准选择。Spring Boot简化了Spring应用的...

    mri:Axon Framework流可视化工具

    Axon MRI-流量可视化工具使用Axon Framework时,MRI / mmrr /aɪ/可以帮助您可视化代码流。安装 gradle jar用法在执行此工具之前,您需要为您的项目生成类路径。 对于Maven运行: $ mvn dependency:build-classpath ...

    axon-kafka:Kafka作为AxonFramework 3的EventBus和EventStore

    Axon Kafka Eventstore...惯例/想法axon-kafka库应仅依赖于Kafka和AxonFramework。 示例是使用SpringBoot实现的。 将有axon-kafka-springboot组件,以方便使用Axon Kafka(后)。进度/功能Kafka发件人已实现并发送消息

    axon-cdi-quickstart:Axon Framework CDI集成快速入门

    **Axon Framework与CDI集成快速入门** Axon Framework是一个基于事件驱动和命令式模式的开源框架,专门设计用于构建可扩展、可维护的微服务架构。它支持领域驱动设计(DDD)、事件溯源和CQRS(命令查询职责分离)...

    微型启动器:带有Spring Cloud和AxonFramework的微型服务

    该应用程序演示使用Axonframework Spring Boot,Spring Cloud的CQRS微服务架构模式。 应用架构图 如何运行 开发模式 docker-compose -f docker/docker-compose.yml up Docker群: docker stack deploy -c docker/...

    axon-auction-example:AxonFramework 拍卖示例

    2011-06-13 新项目“Meta CQRS”正在进行中(尚未发布) 2011-04-08 切换到 Axonframework 1.0-rc3 2010-12-25 从 CQRS 模型生成样板代码 2010-11-21 开始使用 Apache Click Client 2010-11-06 添加了新的 Axon ...

    AxonFramework:JVM上的进化事件驱动微服务框架

    Axon Framework是一个基于域驱动设计,命令查询责任隔离(CQRS)和事件源的原则,用于构建演化的,事件驱动的微服务系统的框架。 因此,它为您提供了遵循这些原则的必要构建基块。 构建块,例如聚合工厂和存储库,...

    spring-boot-starter-axon:Axonframework 的 Spring Boot 启动模块

    spring-boot-starter-axon 简化使用的器。 您只需要将此库添加到您的 Spring Boot 项目中,就会为您注册 Axon 基础架构的合理默认配置。 对于每个 AggregateRoot,一个 EventSourcingRepository 将注册到应用程序上...

    axon-cdi:Axon Framework CDI集成

    Axon Framework CDI集成 一个CDI扩展,可帮助与CDI集成。 您只需要@Produces一些必需的实例并使用@Autoconfigure对其进行注释,就可以在CDI环境中启动和运行Axon Framework。你要做的编写命令处理程序,事件处理程序...

    giftcard-demo:Axon Framework演示应用程序侧重于简单的礼品卡领域

    Axon入门此Axon Framework演示应用程序集中在一个简单的Giftcard域上,旨在显示框架的各个方面。 可以使用在各种模式下运行该应用程序:通过选择特定的配置文件,仅该应用程序的相应部分将处于活动状态。 不选择,则...

    axon 4.5-reference-guide.pdf

    本参考指南详细介绍了Axon Framework的各个核心概念、组件以及最佳实践。 1. **架构概述** Axon 的设计目标是简化事件溯源(Event Sourcing)和领域驱动设计(DDD)的实现,同时提供命令查询责任分离(CQRS)的...

    Axon-trader:将axon框架用于交易应用程序的示例

    给用户的提示AxonFramework团队的我们目前正在对该应用程序进行严格的调整,以确保您将获得有关如何设置Axon Framework应用程序的最新标准集。 由于某些情况,这些都是每个人都可以看到的实时更改。 这确实意味着...

    Axon4.4 文档中文翻译

    它提供了核心框架(Axon Framework)和Axon Server,两者共同帮助开发者创建可扩展、高可维护性的系统,尤其适用于微服务架构。 【核心概念】 1. **领域驱动设计(DDD)**:DDD强调以业务领域为中心构建软件,通过...

    作为 Axon 展示 的Game Rental 应用程序示例项目_java_代码_下载

    “游戏租赁”应用程序展示了如何在软件开发过程中使用Axon Framework 和Axon Server或AxonIQ Cloud 。重点关注的领域是从视频游戏商店的角度来看的租赁服务。 这个存储库提供了这样一个应用程序,尽管是一个演示而...

    hotel-demo:酒店预订应用程序-演示-Axon Framework和Axon Server

    AxonIQ酒店演示 这是此博客文章中使用的示例的实现: : 事件建模采用事件风暴粘滞便笺。 最后一块是UI / UX方面,以完成更类似于电影故事板(白板或数字白板)的功能。 尽管Event Storming专注于发现问题空间,但...

    axon-2.4-full.zip

    Axon Framework 2.4.3 是一个专为构建基于事件驱动和命令式模式的分布式系统而设计的Java框架。这个框架的核心理念是通过事件溯源(Event Sourcing)和领域驱动设计(Domain-Driven Design, DDD)来帮助开发者更好地...

Global site tag (gtag.js) - Google Analytics