1. 命令处理程序从存储库中检索域对象(聚合)并执行它们的方法来更改它们的状态。这些聚合通常包含实际的业务逻辑,因此负责维护自己的状态。聚合的状态变化导致产生领域事件。领域事件和聚合形成领域模型。

2.Saga是CQRS中的概念,用于管理这些复杂的业务事物。

命令

命令描述了改变应用程序状态的意图。它们被实现为(最好是只读的)POJO并使用CommandMessage的实现来进行封装。

命令总是只有一个目的地。尽管发件人并不关心哪个组件处理命令或组件驻留的位置,但对知道它的结果可能很有趣。这就是为什么通过命令总线发送的命令消息允许返回结果的原因

事件

事件是描述应用程序中发生的事件的对象。事件的典型来源是聚合。在Aggregate内发生重要事件时,它将引发一个事件。 在Axon Framework中,事件可以是任何对象。 强烈建议您确保所有事件都是可序列化的。

当事件分派时,Axon将它们包装在一个EventMessage中。使用的消息的实际类型取决于事件的来源。当一个事件由一个Aggregate引发时,它被包装在一个DomainEventMessage(它扩展了EventMessage)中。 所有其他事件都包装在一个EventMessage中。 除了像唯一标识符这样的常见消息属性外,EventMessage还包含一个时间戳。DomainEventMessage还包含引发该事件的聚合的类型和标识符。 它还包含聚集事件流中事件的序列号,它允许重现事件的顺序。

注意,即使DomainEventMessage包含对AggregateIdentifier的引用,您也应始终在实际的Event中包含标识符。虽然EventEventMessage使用DomainEventMessage中的标识符来存储事件,但对于其它情况不会提供一个可靠的值作为标识符。

。聚合可以是任何对象,但是对于标识对象本身需要有几条准则,

  • 它必须实现equals和hashCode以确保与其他实例进行唯一性区分;
  • 实现一个提供一致结果的toString()方法(相同的标识符应该提供一个相等的toString()结果)和
  • 是可序列化的。

参考:https://blog.csdn.net/wangli13860426642/article/details/80662753

复杂的聚合结构

复杂的业务逻辑通常需要的不仅仅是聚合根可以提供的聚合。在这种情况下,将复杂性分散到聚合中的许多实体是很重要的。在使用event sourcing时,不仅聚合根需要使用事件来触发状态转换,而且聚合中的每个实体也是如此。

注意,一个关于聚合不应该暴露状态的常见误解是:聚合中的任何实体都不应该含有属性访问方法,不是的。实际上,如果聚合中的实体向同一聚合中的其他实体暴露状态,则聚合可能会受益匪浅。但是,建议不要把状态暴露到聚合之外。

Axon为复杂聚合结构中的event sourcing提供支持。声明子实体的字段必须使用@AggregateMember进行注释。 此注释告诉Axon注释的字段包含应该检查命令和事件处理程序的类。当一个实体(包括聚集根)应用一个事件时,它首先由聚合根处理,然后通过所有@AggregateMember注释字段向下传递到其子实体

可能包含子实体的字段必须使用@AggregateMember进行注释。 此注释可用于多种字段类型:

  • 实体类型,在字段中直接引用;
  • 集合类型(包含所有集合,如Set,List等);
  • java.util.Map类型;

>>>>>>>>>>>>>>>>>>>>>阅读到  复杂的聚合结构   《三》--https://blog.csdn.net/wangli13860426642/article/details/80662753

DDD随笔-Axon的更多相关文章

  1. Python-数据库支持

    10.Python-数据库支持 使用数据库的好处: a.支持数据的并发访问,多个用户同时对基于磁盘的数据进行读写而不造成任何文件的损坏: b.支持根据多个数据字段或属性进行复杂的搜索: 1.如何操作数 ...

  2. DDD CQRS架构和传统架构的优缺点比较

    明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...

  3. DDD初学指南

    去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...

  4. DDD为何叫好不叫座?兼论DCI与业务分析的方法论

    今天,仔细阅读了园子里面的一个朋友写的<一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?>(http://www.cnblogs.com/ ...

  5. DDD,ORM还是Ado.Net

    三层还是DDD,ORM还是Ado.Net,何去何从? 我本想把这个问题放到博问去,前几次有去博问问过之类的问题,无奈大神们可能都不屑回答别人的低级问题.所以放到随笔里,一方面把自己对ORM.架构的一些 ...

  6. 开始DDD

    如何开始DDD(完) 连续写了两篇文章,这一篇我想是序的完结篇了.结合用户注册的例子再将他简单丰富一下.在这里只添加一个简单需求,就是用户注册成功后给用户发一封邮件.补充一下之前的代码 public ...

  7. 【DDD】--好文收藏

    发现一批好文,完整系列,攒~~ 随笔分类 - DDD - 『圣杰』 DDD理论学习系列(1)-- 通用语言 笔记: 通用语言: a) 简单,便于理解.传播. b) 需要通用,能够准确的传达业务规则. ...

  8. 搭建一个Web API项目(DDD)

    传送阵:写在最后 一.创建一个能跑的起来的Web API项目 1.建一个空的 ASP.NET Web应用 (为什么不直接添加一个Web API项目呢,那样会有些多余的内容(如js.css.Areas等 ...

  9. 三层还是DDD,ORM还是Ado.Net,何去何从?

    我本想把这个问题放到博问去,前几次有去博问问过之类的问题,无奈大神们可能都不屑回答别人的低级问题.所以放到随笔里,一方面把自己对ORM.架构的一些看法写下来抛砖引玉,另一方面最主要的是想寻求大神们指指 ...

随机推荐

  1. js 把字符串保存为txt文件,并下载到本地

    代码如下 exportRaw('text.txt','123123123') function fakeClick(obj) { var ev = document.createEvent(" ...

  2. Xshell里连接VirtualBox里的Centos7

    关闭虚拟机 右键虚拟机->设置->网络,连接方式选择NAT,如下图: 3.在Xshell里连接即可.

  3. 禁止光盘优盘自动播放(Shell Hardware Detection服务)

    strComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & ...

  4. LeetCode——150. Evaluate Reverse Polish Notation

    一.题目链接:https://leetcode.com/problems/evaluate-reverse-polish-notation/ 二.题目大意: 给定后缀表达式,求出该表达式的计算结果. ...

  5. Sqoop-1.4.6安装部署及详细使用介绍

    之所以选择Sqoop1是因为Sqoop2目前问题太多.无法正常使用,综合比较后选择Sqoop1. Sqoop1安装配置比较简单 一.安装部署 (1).下载安装包 下载地址:http://archive ...

  6. 信息安全-加密:AES 加密

    ylbtech-信息安全-加密:AES 加密 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一 ...

  7. 学习笔记之PostgreSQL / pgAdmin / Psycopg / PostGIS

    PostgreSQL: The world's most advanced open source database https://www.postgresql.org/ POSTGRESQL: T ...

  8. [转][PowerShell]ps执行重启IIS

    来自:https://www.aliyun.com/jiaocheng/871477.html write-output 'Restarting IIS servers ............... ...

  9. java的几种引用

    强引用:无论内存是否足够,不会回收. 软引用:内存不足时,回收该引用关联的对象. 弱引用:垃圾回收时,无论内存是否足够,都会回收. 虚引用:任何时候都可能被垃圾回收器回收. 在Java中,虽然不需要程 ...

  10. 00004 - test命令详解

    Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. -------------------------------------------------- ...