基于领域事件和事件溯源的代码结构优化方法及系统技术方案

技术编号:33465923 阅读:16 留言:0更新日期:2022-05-19 00:45
本发明专利技术公开了基于领域事件和事件溯源的代码结构优化方法及系统,属于数据处理技术领域,要解决的技术问题为如何降低业务逻辑复杂度。包括如下步骤:在命令的引发下,通过聚合或领域服务创建一个具有唯一标识符的事件,将所述事件包装在一个EventMessage中;基于观察者模式,通过EventBus将事件分发至事件订阅方,所述事件订阅方包括事件存储订阅方、即时转发订阅方以及其他订阅方;对于事件,通过事件存储订阅方将事件转发并存储数据库,通过即时转发订阅方将事件转发至消息队列,通过转发器将数据库中事件转发至消息队列;基于聚合生成的系列事件,通过聚合根重建聚合的状态。通过聚合根重建聚合的状态。通过聚合根重建聚合的状态。

【技术实现步骤摘要】
基于领域事件和事件溯源的代码结构优化方法及系统


[0001]本专利技术涉及数据处理
,具体地说是基于领域事件和事件溯源的代码结构优化方法及系统。

技术介绍

[0002]在传统J2EE的Action/Service/DAO分层思想模式下,对象只是数据的载体,只有数据字段和Get/Set方法,没有逻辑在对象中,这种数据模型在领域驱动设计中被称为“贫血模型”。随着项目变复杂了,业务逻辑、状态会散落到在大量方法中,原本的代码意图会渐渐不明确,我们将这种情况称为“贫血模型而引发的失忆症”。
[0003]为了解决这种问题,可以根据领域驱动设计的思想,降低业务逻辑复杂度,构建“充血模型”与“聚合”,并使用“领域事件”来描述与处理业务模型里的行为。这样可以将处理的流程解耦,实现系统的可扩展性,提高主业务流程的内聚性。
[0004]如何降低业务逻辑复杂度是需要解决的技术问题。

技术实现思路

[0005]本专利技术的技术任务是针对以上不足,提供基于领域事件和事件溯源的代码结构优化方法及系统,来解决如何降低业务逻辑复杂度的技术问题。
[0006]第一方面,本专利技术的基于领域事件和事件溯源的代码结构优化方法,包括如下步骤:
[0007]在命令的引发下,通过聚合或领域服务创建一个具有唯一标识符的事件,将所述事件包装在一个EventMessage中;
[0008]基于观察者模式,通过EventBus将事件分发至事件订阅方,所述事件订阅方包括事件存储订阅方、即时转发订阅方以及其他订阅方;
[0009]对于事件,通过事件存储订阅方将事件转发并存储数据库,通过即时转发订阅方将事件转发至消息队列,通过转发器将数据库中事件转发至消息队列;
[0010]基于聚合生成的系列事件,通过聚合根重建聚合的状态。
[0011]作为优选,所述聚合为一组相关对象的集合,作为一个整体被外界访问;
[0012]所述聚合具有如下原则:具有唯一标识、为小聚合、通过唯一标识引用其它聚合、在聚合边界之外使用最终一致性,所述小聚合理解为作为集合其对象数量小于阈值。
[0013]作为优选,所述事件包装在一个EventMessage中,所述EventMessage中包括用于标识事件的标识符、用于标识事件来源的消息类型、事件元数据、有效载荷以及时间戳。
[0014]作为优选,在Java项目中,对于命令使用@CommandHandler注解,通过反射把注解的方法保存在内存中,将命令名作为key,将被注解的方法作为value,当命令总线接受的命令时,在内存中取出相应的方法来调用。
[0015]作为优选,通过事件存储订阅方将事件转发至数据库后,对事件进行序列化,基于事件的序列形式以及事件元数据将事件存储至数据库。
[0016]作为优选,通过Disruptor组件,分布式的将事件分发并保存至存储数据库,通过MQ组件将事件分发至即时转发订阅方。
[0017]作为优选,所述EventBus作为事件总线,在事件总线上配置拦截器,向命令添加额外的处理,且无需考虑命令的类型或名称,包括日志记录、安全/授权、监控、负载均衡。
[0018]作为优选,当聚合存活事件超过阈值、且聚合的状态不断发生变化,所述聚合引发多个事件,通过定期创建和存储快照事件的方式,将所述多个事件总结为单个事件,基于所述单个事件,通过聚合根重建聚合的状态。
[0019]第二方面,本专利技术的基于领域事件和事件溯源的代码结构优化系统,执行如第一方面任一项所述的基于领域事件和事件溯源的代码结构优化方法,所述系统包括:
[0020]配置模块,所述配置模块用于创建并配置聚合和领域服务,所述聚合为一组相关对象的集合,作为整体对外,并具有如下原则:具有唯一标识、为小聚合、通过唯一标识引用其它聚合、在聚合边界之外使用最终一致性,所述小聚合理解为作为集合其对象数量小于阈值;
[0021]事件创建模块,所述事件创建模块与所述事件创建模块交互,用于在命令的引发下,通过聚合或领域服务创建一个具有唯一标识符的事件,将所述事件包装在一个EventMessage中,所述EventMessage中包括用于标识事件的标识符、用于标识事件来源的消息类型、事件元数据、有效载荷以及时间戳;
[0022]事件分发模块,所述事件分发模块与所述事件创建模块交互,用于基于观察者模式,通过EventBus将事件分发至事件订阅方,所述事件订阅方包括事件存储订阅方、即时转发订阅方以及其他订阅方,所述EventBus包括Disruptor组件、MQ组件以及其他组件,所述Disruptor组件用于将事件分发至数据库,并对事件进行序列化,基于事件的序列形式以及事件元数据将事件存储至数据库,所述MQ组件用于将事件分发至即时转发订阅方,所述其他组件用于将事件分发至其他订阅方;
[0023]数据库,所述数据库与所述数据分发模块交互,用于存储事件;
[0024]转发器,所述转发器与所述数据库交互,用于转发事件;
[0025]消息队列,所述消息队列与所述事件分发模块和转发器交互,用于将事件转发至远程订阅方;
[0026]聚合重建模块,所述聚合重建模块用于基于聚合生成的系列事件,通过聚合根重建聚合的状态。
[0027]作为优选,在Java项目中,所述事件创建模块用于对于命令使用@CommandHandler注解,通过反射把注解的方法保存在内存中,将命令名作为key,将被注解的方法作为value,当命令总线接受的命令时,在内存中取出相应的方法来调用;
[0028]所述EventBus作为事件总线,在事件总线上配置拦截器,向命令添加额外的处理,且无需考虑命令的类型或名称,包括日志记录、安全/授权、监控、负载均衡;
[0029]当聚合存活事件超过阈值、且聚合的状态不断发生变化,所述聚合引发多个事件,所述聚合重建模块用于通过定期创建和存储快照事件的方式,将所述多个事件总结为单个事件,基于所述单个事件,通过聚合根重建聚合的状态。
[0030]本专利技术的基于领域事件和事件溯源的代码结构优化方法及系统具有以下优点:
[0031]1、使用事件驱动可以进一步减轻了系统之间的耦合,更容易实现Serverless;如
果某个系统出现BUG,根据历史事件可以追溯出正确的值;
[0032]2、事件驱动天然是可审计的,无需单独的审计日志模块,可以轻易查询出历史执行过的命令,以及命令导致的在各个子系统传播的事件;
[0033]3、可以更彻底的隔离了读和写,传统的写法如果在find/get中不小心调了update,隐式的副作用往往会导致非常难查的BUG,一切基于命令和事件的思维,能够杜绝读写职责不清晰带来的不确定的副作用。
附图说明
[0034]为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于领域事件和事件溯源的代码结构优化方法,其特征在于包括如下步骤:在命令的引发下,通过聚合或领域服务创建一个具有唯一标识符的事件,将所述事件包装在一个EventMessage中;基于观察者模式,通过EventBus将事件分发至事件订阅方,所述事件订阅方包括事件存储订阅方、即时转发订阅方以及其他订阅方;对于事件,通过事件存储订阅方将事件转发并存储数据库,通过即时转发订阅方将事件转发至消息队列,通过转发器将数据库中事件转发至消息队列;基于聚合生成的系列事件,通过聚合根重建聚合的状态。2.根据权利要求1所述的基于领域事件和事件溯源的代码结构优化方法,其特征在于所述聚合为一组相关对象的集合,作为一个整体被外界访问;所述聚合具有如下原则:具有唯一标识、为小聚合、通过唯一标识引用其它聚合、在聚合边界之外使用最终一致性,所述小聚合理解为作为集合其对象数量小于阈值。3.根据权利要求1所述的基于领域事件和事件溯源的代码结构优化方法,其特征在于所述事件包装在一个EventMessage中,所述EventMessage中包括用于标识事件的标识符、用于标识事件来源的消息类型、事件元数据、有效载荷以及时间戳。4.根据权利要求1所述的基于领域事件和事件溯源的代码结构优化方法,其特征在于在Java项目中,对于命令使用@CommandHandler注解,通过反射把注解的方法保存在内存中,将命令名作为key,将被注解的方法作为value,当命令总线接受的命令时,在内存中取出相应的方法来调用。5.根据权利要求1

4任一项所述的基于领域事件和事件溯源的代码结构优化方法,其特征在于通过事件存储订阅方将事件转发至数据库后,对事件进行序列化,基于事件的序列形式以及事件元数据将事件存储至数据库。6.根据权利要求1

4任一项所述的基于领域事件和事件溯源的代码结构优化方法,其特征在于通过Disruptor组件,分布式的将事件分发并保存至存储数据库,通过MQ组件将事件分发至即时转发订阅方。7.根据权利要求1

4任一项所述的基于领域事件和事件溯源的代码结构优化方法,其特征在于所述EventBus作为事件总线,在事件总线上配置拦截器,向命令添加额外的处理,且无需考虑命令的类型或名称,包括日志记录、安全/授权、监控、负载均衡。8.根据权利要求1

4任一项所述的基于领域事件和事件溯源的代码结构优化方法,其特征在于,当聚合存活事件超过阈值、且聚合的状态不断发生变化,所述聚合引发多个事件,通过定期创建和存...

【专利技术属性】
技术研发人员:赵子凯江燕孙兴艳
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1