【技术实现步骤摘要】
基于领域事件和事件溯源的代码结构优化方法及系统
[0001]本专利技术涉及数据处理
,具体地说是基于领域事件和事件溯源的代码结构优化方法及系统。
技术介绍
[0002]在传统J2EE的Action/Service/DAO分层思想模式下,对象只是数据的载体,只有数据字段和Get/Set方法,没有逻辑在对象中,这种数据模型在领域驱动设计中被称为“贫血模型”。随着项目变复杂了,业务逻辑、状态会散落到在大量方法中,原本的代码意图会渐渐不明确,我们将这种情况称为“贫血模型而引发的失忆症”。
[0003]为了解决这种问题,可以根据领域驱动设计的思想,降低业务逻辑复杂度,构建“充血模型”与“聚合”,并使用“领域事件”来描述与处理业务模型里的行为。这样可以将处理的流程解耦,实现系统的可扩展性,提高主业务流程的内聚性。
[0004]如何降低业务逻辑复杂度是需要解决的技术问题。
技术实现思路
[0005]本专利技术的技术任务是针对以上不足,提供基于领域事件和事件溯源的代码结构优化方法及系统,来解决如何降低业 ...
【技术保护点】
【技术特征摘要】
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任一项所述的基于领域事件和事件溯源的代码结构优化方法,其特征在于,当聚合存活事件超过阈值、且聚合的状态不断发生变化,所述聚合引发多个事件,通过定期创建和存...
【专利技术属性】
技术研发人员:赵子凯,江燕,孙兴艳,
申请(专利权)人:浪潮云信息技术股份公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。