在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

这篇具有很好参考价值的文章主要介绍了在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[源代码地址https://github.com/junkai-li/NetCoreKevin]
基于NET6搭建跨平台WebApi架构支持单点登录、多缓存、自动任务、分布式、多租户、日志、授权和鉴权 、网关 注册与发现、CAP集成事件、领域事件、 docker部署

**首要要理解什么是领域事件?**
领域事件是指发生在特定领域中的事件,是你希望在同一个领域中其他部分知道并产生后续动作的事件
领域事件是领域专家所关心的(需要跟踪的、希望被通知的、会引起其他模型对象改变状态的)发生在领域中的一些事情
## 为什么需要领域事件?
领域事件的作用是捕获领域中发生的具有业务价值的一些事情,保证聚合间的数据一致性,替换批量处理,实现事件源模式,进行限界上下文集成等1。领域事件是一个领域模型中极其重要的部分,用来表示领域中发生的事件。一个领域事件必须对业务有价值,有助于形成完整的业务闭环,也即一个领域事件将导致进一步的业务操作。 领域事件可以是业务流程的一个步骤,例如订单提交,客户付费100元,订单完工后续业务

## **什么情况下使用领域事件**
1.在同一微服务中使用领域事件
不同微服务中使用集成事件本架构也有实现参考CAP

在微服务架构中,集成事件和领域事件都是用于保持领域状态同步的方式。集成事件用于跨多个微服务或外部系统保持域状态同步,而领域事件为聚合间提供了最终一致性。集成事件的目的是将已提交事务和更新传播到其他子系统,无论它们是其他微服务、绑定上下文,还是外部应用程序。因此,它们应仅在成功保存实体时发生,否则便会如同整个操作从未发生一样。而领域事件可以将大的批量操作简化为许多小的业务操作,完成强大的事件存储,完成限界上下文间的集成,是更复杂架构(cqrs)的一种支持12。
在保证集成事件和领域事件的最终一致性方面,可以使用消息队列等异步通信方式。如果系统使用受集成事件驱动的最终一致性,建议让最终用户清楚这种方法。系统不应使用模拟集成事件的方法,例如 SignalR 或客户端轮询系统。最终用户和业务所有者必须显式接受系统中的最终一致性,并意识到在许多情况下,只要显式使用该方法,业务就可以得到很好的支持3.
**

## 集成事件和领域事件的区别
集成事件 (Integration Event)用于使领域状态在多个微服务或外部系统中保持同步,将已提交事务和更新传播到其他子系统,无论它们是其他微服务、绑定上下文,还是外部应用程序。而领域事件 (DomainEvent)是推送到领域事件调度程序的消息,可基于IoC容器或任何其他方法作为内存中转存进程实现 (如 Mediator),用于驱动业务流转,尽量采用基于事件的最终一致,降低微服务之间直接访问的压力,实现微服务之间的解耦,维护领域模型的独立性和数据一致性
**
**

## 基于mediatr实现领域事件并结合EFCore进行二次封装

**
参考架构代码

在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

 


基于mediatr二次封装类库

在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

 


服务注入

在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

 

继承领域事件继承类

在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

 

注册事件 处理事件

在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

 

添加事件

 

在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

 

处理

在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

 


EFcore dbContext Publish 事件

在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装

 

测试 
[源代码地址https://github.com/junkai-li/NetCoreKevin](https://github.com/junkai-li/NetCoreKevin)文章来源地址https://www.toymoban.com/news/detail-434198.html

到了这里,关于在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 杨中科 .NETCORE EFCORE第七部分 一对一,多对多

    1、builder.HasOne(o =o.Delivery).WithOne(d=d.Order).HasForeignKey(d=dOrderId); 2、测试插入和获取数据 示例 新建 Order 新建 Delivery DeliveryConfig OrderConfig 执行 迁移命令 查看数据库 测试数据插入 运行查看数据 1、多对多:老师一学生 2、EF Core 5.0开始,才正式支持多对多 3、需要中间表,举例数据

    2024年01月17日
    浏览(44)
  • 【微服务】02-集成事件与MediatR

    1.1 定义 集成事件目的是为了实现系统的集成,主要是用来在系统多个微服务之间相互传递事件,实现方式有两种 发布、订阅通过EventBus方式 通过观察者模式,由观察者将事件发给关注事件的人 1.2 集成事件工作原理 1.3 总结 集成事件是跨服务的领域事件 集成事件一般由领域

    2024年02月11日
    浏览(26)
  • 杨中科 .NETCORE ENTITY FRAMEWORK CORE-1 EFCORE 第一部分

    1、说明: 本课程需要你有数据库、SOL等基础知识。 2、ORM: ObjectRelational Mapping。让开发者用对象操作的形式操作关系数据库 比如插入: 比如查询: 3、有哪些ORM: EF core(官方推荐)、Dapper、SqlSugar、FreeSql等 1、Entity Framework Core(EF Coxe)是微软官方的ORM框架优点: 功能强大、官方支持、生

    2024年02月02日
    浏览(63)
  • 领域驱动设计——DDD领域驱动设计进阶

    进阶篇主要讲解领域事件、DDD 分层架构、几种常见的微服务架构模型以及中台设计思想等内容。如何通过领域事件实现微服务解耦?、怎样进行微服务分层设计?、如何实现层与层之间的服务协作?、通过几种微服务架构模型的对比分析,让你了解领域模型和微服务分层的作

    2024年01月15日
    浏览(52)
  • DDD领域驱动设计(六)

    领域对象需要资源存储。存储手段多样化,常见就是数据库,分布式缓存,localCache.资源库的作用,就是对领域的存储和访问进行统一管理对象。在抽奖平台中。通过下面这种方式组织资源库。

    2024年01月24日
    浏览(72)
  • DDD领域驱动

    我们经常讲技术为业务服务,架构设计需要对业务充分理解,在面向复杂的业务场景时,会面临诸多问题: 复杂系统设计 :业务系统多、业务类型多、业务相互耦合,有没有合适的方法来指导模块的边界开发? 多团队协同 :业务系统边界划分不清,系统间依赖复杂,往往一

    2024年02月09日
    浏览(36)
  • DDD[领域驱动模型]

    这是一种思想,不是一个工具。更多内容前往 IT-BLOG Eric Evans 于 2004 年提出的一种软件设计方法和理论。在应用架构的设计中, 领域驱动设计 DDD 占据着非常重要的位置,可以说 DDD 是应用架构设计的核心。 DDD 是一套综合软件系统分析和设计的面向对象建模方法。 过去 系统

    2024年02月04日
    浏览(40)
  • DDD领域设计理解

    目录 DDD 领域驱动设计理解(Domain Driven Design) 概念 核心 目标 领域驱动设计事实上是1针对OOAD的一个扩展和延申。DDD基于面向对象分析与设计技术。 对技术架构进行了分层规划。 对每个类进行了策略和划分。 OOAD 面向对象设计的扩展和延申,多了domain的概念就是需求分析和

    2024年04月10日
    浏览(34)
  • DDD系列:四、领域层设计规范

       在一个DDD架构设计中,领域层的设计合理性,会直接影响整个架构的代码结构以及应用层、基础设施层的设计。但不同业务的领域层设计是需要不断思考和演进的,既要避免未来的扩展性差,又要确保不会过度设计导致复杂性。 传统OOP的缺陷: extends导致的强依赖父类对

    2024年02月02日
    浏览(30)
  • 领域驱动设计DDD实际项目落地最佳实践

    领域驱动设计(Domain Driven Design,简称:DDD)设计思想和方法论早在2005年时候就被提出来,但是一直没有被重视和推荐使用,直到2015年之后微服务流行之后,再次被人重视和推荐使用。 下面我来介绍一下DDD设计思想和方法论,同时结合我们在实际项目中应用总结和思考。 目录

    2024年02月08日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包