Axon框架使用指南(一):简介

         随着时间的推移,对软件项目的需求迅速增加。公司希望他们的(网络)应用程序与他们的业务一起发展。这意味着不仅项目和代码库变得更加复杂,而且意味着不断添加,更改和功能被删除。发现一个看起来很容易实现的功能可能要求开发团队拆分整个应用程序可能令人沮丧。此外,今天的Web应用程序面向潜在数十亿人的受众,使可扩展性成为无可争辩的要求。

        虽然有很多应用程序和框架涉及可扩展性问题,例如GigaSpaces和Terracotta,但它们有一个基本缺陷。这些技术堆栈尝试解决可伸缩性问题,同时让开发人员使用他们习惯的分层架构开发应用程序。在某些情况下,他们甚至会阻止或严重限制使用真实领域模型,从而迫使所有领域逻辑进入服务。尽管开始构建应用程序的速度会更快,但最终这种方法会导致复杂性增加并使开发速度放慢。

         命令查询责任分离(CQRS)模式通过彻底改变应用程序架构的方式来解决这些问题。 它不是将操作逻辑分成单独的层,而是判断操作是在改变应用程序的状态还是在查询,从而将操作分离到不同的部分。这意味着执行命令(可能改变应用程序状态的动作)由与查询应用程序状态的组件不同。这种分离的最重要原因是每个人都有不同的技术和非技术要求。当执行命令时,查询组件使用事件同步或异步更新。这种通过事件进行更新的机制,使得这种架构具有可扩展性,可伸缩性并最终能够更好地维护。

     CQRS 的完整解释不在本文档的范围内。如果您想了解更多关于 CQRS 的背景信息, 请访问Axon框架网站: www.axonframework.org。它包含指向背景信息的链接。

       由于CQRS与主导当今软件领域的分层架构截然不同,因此开发人员在尝试围绕这种架构寻找解决方案时陷入一些陷阱并不罕见。 这就是Axon Framework构思的原因:帮助开发人员在关注业务逻辑的同时实施CQRS应用程序。

什么是Axon?

        通过支持开发人员应用命令查询责任分离(CQRS)体系结构模式,Axon Framework可帮助构建可扩展,可扩展和可维护的应用程序。它通过提供最重要构建块的实现来实现,如聚合,存储库和事件总线(事件的调度机制)。此外,Axon提供了注释支持,它允许您构建聚集和事件侦听器,而无需将代码绑定到Axon特定逻辑。这使您可以专注于业务逻辑而不是基础设施,并帮助您使代码更容易独立测试。

       Axon并不以任何方式试图对开发人员隐藏CQRS架构或其任何组件。因此, 对每个团队,根据团队规模的不同, 最好有一个或多个开发人员对 CQRS 有透彻的了解。然而,Axon在确保将事件传递给正确的事件侦听器并按正确的顺序同时处理它们方面提供了帮助。这些多线程问题通常很难处理,导致难以跟踪的错误,有时会导致应用程序完全失败。当你有紧迫的期限时,你可能甚至不想关心这些问题。 Axon的代码已经过彻底测试,可以防止这些类型的错误。

        Axon框架由许多模块(jars)组成,这些模块提供了构建可扩展基础架构的工具和组件。 Axon核心模块为不同组件提供基本的API,以及为单个JVM应用程序提供解决方案的简单实现。其他模块通过提供专门的构建模块来解决可伸缩性或高性能问题。

何时使用Axon?

       并非所有的应用程序都能从Axon中受益。 简单的CRUD(创建,读取,更新,删除)预计不会扩展的应用程序可能不会从CQRS或Axon中受益。但是,有许多应用程序可以从Axon中受益。可能受益于CQRS和Axon的应用程序是那些存在一个或多个以下特征的应用程序:

扫描二维码关注公众号,回复: 1585265 查看本文章
  • 该应用程序可能会在很长一段时间内对新功能进行扩展。例如,一家网上商店可能会开始跟踪订单进度的系统。在后期阶段,这可以通过库存信息进行扩展,以确保在销售物品时更新库存。甚至以后,会计可能需要记录销售的财务统计数据等。虽然很难预测未来软件项目的演变情况,但大多数类型的应用程序都能清晰地表现出这类需求。
  • 该应用程序具有较高的读写比。这意味着数据只会被写入几次,并且会被读取多次。由于查询的数据源与用于命令验证的数据源不同,因此可以优化这些数据源以进行快速查询。重复数据不再是一个问题,因为事件在数据更改时发布。
  • 该应用程序以多种不同格式呈现数据。现在许多应用程序在网页上显示信息时不会停止更新。例如,某些应用程序会每月发送一封电子邮件通知用户发生的可能与其相关的更改。搜索引擎是另一个例子。他们虽然使用与您的应用程序相同的数据,但针对快速搜索进行了优化。报告工具也可将信息汇总到报告中,这也是相同数据的不同格式。使用Axon,相同数据的不同使用目的的数据源可以实时或按计划独立更新。
  • 当应用程序有不同的受众并使用分离的组件操作相同数据时,它也可以从Axon中受益。这种应用的一个例子是在线商店。员工将更新网站上的产品信息和可用性,同时客户下订单并查询其订单状态。借助Axon,这些组件可以部署在不同的机器上,并使用不同的策略进行扩展。他们使用事件保持最新状态,Axon将派发给所有订阅的组件,而不管他们部署在哪台机器上。
  • 与其他应用程序集成可能是繁琐的工作。使用命令和事件严格定义应用程序的API可以更容易地与外部应用程序集成。 任何应用程序都可以发送命令或侦听由应用程序生成的事件。

猜你喜欢

转载自blog.csdn.net/wangli13860426642/article/details/80018108