在.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/p/17374053.html

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

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

相关文章

  • c# 实现的支付宝支付

    以下是详细的“c# 实现的支付宝支付”的完整攻略: 一、创建支付宝开发者账号 在使用支付宝支付之前,我们需要先注册一个支付宝开发者账号。注册完成后,登录 支付宝开放平台 点击“开发文档”,选择“支付宝支付”,然后就可以获得相关的开发文档。 二、开通支付宝支付 开发者账号注册完成后需要开通支付宝支付,并获取 appid、private_key 等信息。 三、引…

    C# 2023年6月6日
    00
  • c#项目实现发布到服务器全过程

    下面是“C#项目实现发布到服务器全过程”的攻略: 1. 更新项目代码 首先,需要将本地项目代码更新到最新的版本,并且确认在发布到服务器之前,项目在本地是可以正常运行的。 2. 发布项目 在 Visual Studio 中,可以使用 Publish Wizard 工具来发布 C# 项目。具体步骤如下: 在 Visual Studio 中打开需要发布的项目; 点…

    C# 2023年6月6日
    00
  • C# 常量 结构体 委托

    常量 const double PI = 3.1415926; 常量名命名一般使用大写字母 枚举类型 开发一个游戏,游戏角色有法师(Mage)、射手(Archer)、刺客(Assassin)、坦克(Tank)、铺助(Support)、战士(Warrior),等不同类型。 ❓如何存储游戏角色 使用int类型 :创建一套规则,提前为各个类型角色绑定一个数字标识 …

    C# 2023年5月2日
    00
  • ASP.NET Core MVC 从入门到精通之Razor语法

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年4月24日
    00
  • webpack-dev-server核心概念案例详解

    webpack-dev-server核心概念案例详解 webpack-dev-server是一个基于Node.js的开发服务器,它可以实时重新加载页面,提高开发效率。本文将详细讲解webpack-dev-server的核心概念,并提供两个示例。 1. 安装webpack-dev-server 在使用webpack-dev-server之前,需要先安装它。可以…

    C# 2023年5月15日
    00
  • 在asp.NET中字符串替换的五种方法第2/2页

    好的。在asp.NET中字符串替换的五种方法是一个比较常见的问题。我将为您提供完整攻略,包括步骤、代码块和示例说明。 步骤 在ASP.NET中,字符串替换的五种方法如下: Replace 方法 Regex.Replace 方法 StringBuilder.Replace 方法 StringBuffer.Replace 方法 String.Format 方法 …

    C# 2023年6月3日
    00
  • 微信小程序与AspNetCore SignalR聊天实例代码

    微信小程序与AspNetCore SignalR聊天实例代码 在本攻略中,我们将详细讲解如何使用微信小程序和AspNetCore SignalR实现聊天功能,并提供两个示例说明。 步骤一:创建AspNetCore SignalR应用程序 首先,我们需要创建一个AspNetCore SignalR应用程序。您可以使用Visual Studio创建一个新的Asp…

    C# 2023年5月17日
    00
  • c#中单例类与静态类的区别以及使用场景

    C#中单例类与静态类都是常用的设计模式,但是在使用时需要注意它们之间的区别和适用场景。下面将分别对单例类与静态类进行详细讲解。 单例类 单例类是一种只能实例化一个对象的类,通过保证在程序中只有一个实例对象来实现类的控制。单例类通常都由一个私有构造函数、一个静态变量和一个静态工厂方法组成。 单例类主要适用于以下场景: 系统中需要限制对象的数量,并且只需要有一个…

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