在.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.cnblogs.com/net-kevin-li/archive/2023/05/05/17374053.html

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

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

相关文章

  • C#实现发送邮件的三种方法

    具体的C#实现发送邮件的三种方法攻略如下: 一、使用SMTP客户端库发送邮件 步骤: 引用System.Net.Mail命名空间 csharp using System.Net.Mail; 创建SmtpClient对象,并设置邮件服务器和端口号等相关信息 csharp SmtpClient smtpClient = new SmtpClient(“smtp.…

    C# 2023年6月3日
    00
  • c#学习之30分钟学会XAML

    C#学习之30分钟学会XAML XAML是一种用于创建UI(用户界面)的标记语言,它是WPF(Windows Presentation Foundation)框架的一部分。通过使用XAML,你可以将应用程序的外观和交互逻辑与应用程序的代码分离开来,这可以提高应用程序的可维护性和可扩展性。在本文中,我们将介绍XAML的基础知识,并演示如何使用XAML创建一个简…

    C# 2023年5月15日
    00
  • C# SaveFileDialog与OpenFileDialog用法案例详解

    C#SaveFileDialog与OpenFileDialog用法案例详解 SaveFileDialog SaveFileDialog用于显示一个保存文件的对话框。 基本用法 使用SaveFileDialog需要首先在程序中引用命名空间: using System.Windows.Forms; 然后创建一个SaveFileDialog对象,设置其属性,最后使…

    C# 2023年5月15日
    00
  • C# 单元测试全解析

    C# 单元测试全解析 前言 单元测试在软件开发过程中是一个至关重要的环节,可以确保代码的质量与正确性。而C#作为一种强类型编程语言,提供了方便易用的单元测试框架。本文将全面讲解C#中的单元测试包括:单元测试框架的介绍、搭建单元测试环境、编写单元测试用例、运行单元测试。希望本文能够对C#单元测试的学习与实践有所帮助。 单元测试框架介绍 单元测试框架是C#中用于…

    C# 2023年5月31日
    00
  • C#中常使用进度条的代码

    让我来为你讲解如何在C#应用程序中使用进度条的代码。 1. 创建进度条控件 在Visual Studio中创建一个新的Windows Forms应用程序项目。然后,找到工具箱中的“ProgressBar”控件并将其拖放到窗体上。可以通过设置控件的属性来更改进度条的外观和行为,例如使进度条水平或垂直、更改颜色等等。 2. 编写代码更新进度条 进度条的名称应该是…

    C# 2023年6月7日
    00
  • Docker安装部署Net Core实现过程解析

    Docker安装部署Net Core实现过程解析 Docker是一种容器化技术,可以将应用程序及其依赖项打包到一个容器中,使其可以在任何环境中运行。在本文中,我们将讨论如何使用Docker安装和部署.NET Core应用程序。 步骤1:安装Docker 在开始之前,您需要在您的计算机上安装Docker。您可以从Docker官网下载并安装Docker。 步骤2…

    C# 2023年5月16日
    00
  • 使用递归实现数组求和示例分享

    下面是使用递归实现数组求和的完整攻略: 介绍 递归是一种常见的编程技巧,在解决一些问题时可以大大简化代码。本文将介绍如何使用递归来计算一个整数数组的和。 思路 使用递归求和的基本思路是,把数组分成两部分:第一部分是第一个元素,第二部分是余下的所有元素。求和的结果就是第一个元素加上余下所有元素的和。这个过程可以反复迭代,直到数组中只剩下一个元素。 以下是使用递…

    C# 2023年6月7日
    00
  • C#读取Excel的三种方式以及比较分析

    下面是详细讲解“C#读取Excel的三种方式以及比较分析”的完整攻略。 背景 C#是微软推出的一门基于.NET Framework的编程语言,是广泛使用的企业级编程语言之一。而Excel是改善我们日常工作中的一大利器。 在实际的应用过程中,C#读取Excel文件的需求非常普遍。而为了满足这个需求,我们可以使用三种方式来读取Excel文件,分别是: 1. 使用…

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