DDD随笔-Axon

Posted lshan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DDD随笔-Axon相关的知识,希望对你有一定的参考价值。

  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的主要内容,如果未能解决你的问题,请参考以下文章

关于DDD如何落地的随笔

随随笔随笔新新

随笔标题

随笔测试

笔新新随随笔 新随

新随笔新随笔