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. solrCloud index search (图)

    结合网上的资料,抄袭了几张图,记录下. 1.solrcloud-collection/shard/replica 1.Replica.Leader是core的角色,在index.search的过程中作 ...

  2. window下sh文件在linux转码

    本文转载自:https://blog.csdn.net/omiconlee/article/details/53407438 1)在Windows下转换: 利用一些编辑器如UltraEdit或Edit ...

  3. Android Studio 增加函数注释模板

    此篇文章主要介绍如何在Android Studio中函数如何添加注释,使其和eclipse一样方便的添加注释 Android Studio默认函数注释为 /** * */ 下面方法将要改为如下格式 / ...

  4. Ubuntu 14.10 下Hadoop代码编译问题总结

    问题1  protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin.MojoExecutionExceptio ...

  5. 【转】SOA架构设计经验分享—架构、职责、数据一致性

      1.背景介绍       最近一段时间都在做系统分析和设计工作,面对的业务是典型的重量级企业应用方向.突然发现很多以往觉得很简单的问题变得没有想象的那么容易,最大的问题就 是职责如何分配.论系统架 ...

  6. PAT 乙级 1009 说反话 (20) C++版

    1009. 说反话 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一句英语,要求你编写程序,将句中 ...

  7. 让HTMLrunner 报告的子列表都 默认展示出来的 方法(方便发送邮件时可以方便查看)

    1.找到生成的测试报告,获取到all元素 2.在HTMLrunner源码,</script> 标签上 加入一个函数 #让所有列表都展示出来window.onload = function ...

  8. spring AOP 之一:spring AOP功能介绍

    一.AOP简介 AOP:是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点.Aop的典型应用即spring的事务机制,日志记录.利用AOP可以对业务逻辑的 ...

  9. 文档碎片及xml讲解

    1.将数据渲染到页面的几种方式 1.字符串拼接 2.dom循环 3.模板 4.文档碎片 字符串拼接: 优势:只进行一次dom回流 缺点:原有的dom事件会消失 案例分析:原有list中有3个li,并且 ...

  10. centos7 搭建DHCP服务器

    一.DHCP简单讲解 DHCP就是动态主机配置协议(Dynamic Host Configuration Protocol)是一种基于UDP协议且仅限用于局域网的网络协议,它的目的就是为了减轻TCP/ ...