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

yizhihongxing

[源代码地址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.cnblogs.com/net-kevin-li/archive/2023/05/05/17374053.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在.NetCore中 DDD中基于mediatr实现领域事件并结合EFCore进行二次封装 - Python技术站

(0)
上一篇 2023年5月5日
下一篇 2023年5月5日

相关文章

  • C#不重复输出一个数组中所有元素的方法

    首先,我们需要定义一个数组用于存储元素,然后使用foreach循环遍历数组中的每一个元素,将其添加到一个HashSet中。由于HashSet不允许重复元素,所以最终我们得到的就是不重复的元素集合。 下面是实现该算法的C#代码: int[] arr = { 1, 2, 3, 4, 5, 3, 4, 1 }; HashSet<int> hs = ne…

    C# 2023年6月7日
    00
  • vs2015怎么编写第一个windows程序?

    请参考以下完整攻略: 步骤1:打开Visual Studio 2015 首先,你需要安装Visual Studio 2015,然后打开它。 步骤2:创建一个新项目 在Visual Studio 2015中,单击“文件(File)”菜单,选择“新建(New)”,然后选择“项目(Project)”。 在“新建项目(New Project)”对话框中,选择“Vis…

    C# 2023年6月6日
    00
  • 在 .NET MAUI 中加载 json 文件的方法

    以下是关于在.NET MAUI中加载JSON文件的方法的完整攻略: 1. 问题描述 在.NET MAUI应用程序中,我们需要加载JSON文件以便读取其中的数据。本攻略将介绍如何在.NET MAUI中加载JSON文件。 2. 解决方案 在.NET MAUI中,我们可以使用System.Text.Json命名空间中的JsonSerializer类来加载JSON文…

    C# 2023年5月12日
    00
  • C#创建dll类库的图文步骤

    下面我来详细讲解C#创建dll类库的图文步骤,包括示例说明。 1. 创建新的C#类库项目 首先,我们需要在Visual Studio中创建一个新的C#类库项目。 在弹出的对话框中,选择“Class Library”作为项目类型,选择项目的名称和所在位置,然后单击“创建”按钮即可创建一个空的C#类库项目。 2. 添加类库代码 接下来,我们需要添加类库代码。在这…

    C# 2023年6月1日
    00
  • 读懂正则表达式就这么简单

    作为网站的作者,我非常乐意为大家提供“读懂正则表达式就这么简单”的完整攻略。 步骤一:了解正则表达式的基本语法 正则表达式(Regular Expression)是一种用来描述、匹配字符串模式的表达式。在学习正则表达式之前,我们需要先了解其基本语法和常用元字符。 基本语法: 字符:表示单个字符,比如数字、字母、符号等。 字符集:用一组方括号包裹多个字符表示,…

    C# 2023年6月7日
    00
  • 浅谈C#数组(一)

    来分享一下“浅谈C#数组(一)”的完整攻略。 简介 C#中的数组是一组具有相同数据类型的元素的集合。在C#中声明数组时需要指定数据类型、数组名称和数组元素数量。 声明和初始化数组 在C#中声明数组的语法如下: <数据类型>[] <数组名称> = new <数据类型>[<元素数量>]; 例如: int[] num…

    C# 2023年5月15日
    00
  • C#实现飞行棋游戏

    C#实现飞行棋游戏攻略 1. 游戏规则概述 飞行棋是一种常见的棋类游戏,又称“飞行棋”,据传说源于古印度的游戏,起源于印度古董陀罗尼。其游戏规则如下: 1.1 游戏棋盘 游戏棋盘为正方形,格数为12×12。每个玩家有4个飞机,分为红、黄、蓝、绿四色。 1.2 开始游戏 游戏开始时,每个玩家的4架飞机都在停机坪上。每次掷骰子,6点时,可以先从停机坪起飞一架飞机…

    C# 2023年6月6日
    00
  • JSP数据分页导出下载显示进度条样式

    JSP是一种动态网页开发技术,可以用于开发数据分页、导出、下载等功能。在实现这些功能时,我们通常需要使用JavaScript和CSS来实现进度条样式。本文将介绍如何使用JSP实现数据分页、导出、下载和显示进度条样式。 数据分页 在JSP中,可以使用JSTL标签库和EL表达式来实现数据分页。以下是示例: <%@ taglib prefix="c…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部