(第3天)每日源码调试之旅--实现CQRS模式的AXON框架

本文详细解析了Aggregate在AggregateConstructorCommandHandler中的构造流程,从AbstractRepository的新实例创建开始,经过LockingRepository的并发保护机制,再到EventSourcingRepository的事件回溯机制,最终到达EventSourcedAggregate的初始化过程。

接前一天的调试,调试断点来到AggregateConstructorCommandHandler的handle方法:

首先调用AbstractRepository(提供aggregates存储的抽象,实际值为EventSourcingRepository)的newInstance构造一个Aggregate实例,传入的参数为命令handler的handle lambda表达式。

继续进入到LockingRepository(提供一个锁机制以防止对聚合类并发修改的Repository实现)的doCreateNew方法:

继续跟进到EventSourcingRepository(实现事件回溯机制的Repository,能够自动地发送新事件event到给定的EventBus并代理事件存储到给定的EventStore)的doCreateNewForLock方法:

继续跟进到EventSourcedAggregate(可以从已经被聚合类发布的事件中回溯出来的聚合类实现)的initialize方法:

该方法第一个参数是之前的handle lambda表达式,第二个是用来描述聚合类结构的监视器,第三个是EventBus,第四个是快照触发器。首先用除lambda回调以外的三个参数初始化一个EventSourcedAggregate实例,接着进入到AggregateLifecycle(模拟聚合类生命周期的抽象基类)的registerWithUnitOfWork方法:用当前的UnitOfWork注册该aggregate,最后进入到AnnotatedAggregate(允许聚合根变成一个带注解command和event的handler注解的POJO,此类的初始化在EventSourcedAggregate初始化里被调用过,初始化了EventBus和inspector)的registerRoot(注册聚合根并调用任何延迟的还未应用到聚合类的事件)方法:

继续进入到AggregateLifecycle的executeWithResult(执行给定的task返回执行结果)方法:

debug越跟越深,先暂停,明天继续。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值