zoukankan      html  css  js  c++  java
  • CQRS架构和Axon框架入门实践

    CQRS(Command Query Responsibility Separation,命令查询职责分离)最早来自于Betrand Meyer(Eiffel语言之父,OCP提出者)提出的概念。其基本思想在于,任何一个对象的方法可以分为两大类:
    • 命令(Command):不返回任何结果(void),但会改变对象的状态。
    • 查询(Query):返回结果,但是不会改变对象的状态,对系统没有副作用。
     
    CQRS 中的命令这方面最重要的部分包括:
    • 命令(Command),它负责捕获用户的意图,即接下来应该发生什么事。
    • 命令处理器(Command Handler),它负责执行所发送的命令。
    • 命令总线(Command Bus),负责将命令传递给对应的命令处理器。
    从架构图上来看,CQRS 的实现似乎并不难,许多开发者觉得无非是「增删改」一套系统一个数据库,「查询」一个系统一个数据库而已,有点类似「读写分离」,并没有什么特别的地方。但是真正要使用 CQRS 是有许多问题与细节要解决的。
     
    使用CQRS的一个问题是寻找一个成熟易用的框架。Axon 可能算一个。
    Axon是一个轻量级的Java开源框架,可以帮助构建你构建基于CQRS模式的可伸缩、可扩展和可维护的Java应用程序。它还可以帮助你准备事件溯源(Event Sourcing)所需要的环境。Axon提供了所有重要构建模块的实现,如聚合、存储库,命令和时间总线。Axon可以让开发人员的工作更为轻松。
     
    CQRS 在 DDD 中是一种常常被提及的模式,它的用途在于将领域模型与查询功能进行分离,让一些复杂的查询摆脱领域模型的限制,以更为简单的 DTO 形式展现查询结果。同时分离了不同的数据存储结构,让开发者按照查询的功能与要求更加自由地选择数据存储引擎。
     
    同样的,CQRS 在带来架构自由与便利的同时也不可避免地引入了额外的复杂性与技能要求,例如对于分布式事务,消息中间件的管理,数据模型的设计等等,所以在引入 CQRS 之前需要对团队能力与现有架构做仔细的分析,对短板进行必要的提升。如果现有系统逻辑较为简单,只是一些 CRUD,那么并不建议使用 CQRS。但是如果你的业务系统已经非常庞大,业务流程庞杂,逻辑繁琐,那么不妨尝试使用 CQRS 将 Command 与 Query 进行拆分,将领域模型与数据模型的边界划分得更清晰些。
  • 相关阅读:
    Vue之自定义组件的v-model
    compression-webpack-plugin 开启gzip vue
    vue-i18n ,vue项目中如何实现国际化
    vue 组件的 scrollBehavior 2
    vue-router中scrollBehavior的巧妙用法
    页面刷新(vue)
    服务器配置nginx.conf文件
    mobaxterm配置nginx
    flutter环境搭建
    让GIt忽略SSL证书错误的方法
  • 原文地址:https://www.cnblogs.com/rickie/p/14968564.html
Copyright © 2011-2022 走看看