北京网站建设公司哪家实惠网络技术服务

pingmian/2026/1/26 16:03:11/文章来源:
北京网站建设公司哪家实惠,网络技术服务,互联网公司有哪几家,一个网站的上线流程阅读本文你的收获 学习MediatR工具#xff0c;实现进程内消息发送和处理过程的解耦学习MediatR的两种消息处理模式了解中介者模式和其好处 一、什么是MediatR#xff1f; MediatR是一款基于中介者模式的思想而实现的.NET库#xff0c;支持.NET Framework和跨平台 的.NET C…阅读本文你的收获 学习MediatR工具实现进程内消息发送和处理过程的解耦学习MediatR的两种消息处理模式了解中介者模式和其好处 一、什么是MediatR MediatR是一款基于中介者模式的思想而实现的.NET库支持.NET Framework和跨平台 的.NET Core。主要是为了解决进程内消息发送与消息处理过程之间的耦合问题。MediatR的作者是Jimmy Bogard如果你不知道这个人想必你也用过他开发的AutoMapper吧。 它通过一种进程内消息传递机制无其他外部依赖进行请求/响应、命令、查询、通知和事件的消息传递并通过泛型来支持消息的智能调度。 MediatR有两种消息处理模式 Request/Response模式请求响应模式一对一消息Message将被单个处理者Handler处理可以有返回值Notifictaion模式发布订阅模式一对多Message可以被多个Handler处理无返回值 二、中介者模式介绍 为什么使用中介者模式 在现实生活中中介者的存在是不可缺少的比如房屋中介、招聘平台等网络世界中有很多中介者模式的身影例如QQ游戏平台聊天室、QQ群和短信平台。 在软件设计领域为什么要使用中介者模式呢如果不使用中介者模式的话各个同事对象将会相互进行引用如果每个对象都与多个对象进行交互时将会形成如下图所示的网状结构。 从上图可以发现如果不使用中介者模式的话每个对象之间过度耦合这样的既不利于类的复用也不利于扩展。如果引入了中介者模式那么对象之间的关系将变成星型结构采用中介者模式之后会形成如下图所示的结构 中介者模式使之前的网状结构现在变成了以中介者为中心的星星结构。这样的设计大大减少了系统的耦合度。 中介者就像一个容器的它自己把控着整个流程和每一个对象都有或多或少或近或远的联系多个对象之间不用理睬其他对象发生了什么只是负责自己的模块就好然后把消息发给中介者让中介者再分发给其他的具体对象从而实现通讯 —— 这个思想就是中介者的核心思想而且也是DDD领域驱动设计的核心思想之一。 中介者模式是23种设计模式之一 中介者模式是23种设计模式的其中一个。中介者模式是一个行为设计模式它允许我们公开一个统一的接口系统的 不同部分 可以通过该接口进行 通信而 不需要 显式的相互作用 类图结构如下 中介者使各个对象不需要显式地相互引用从而使其耦合性降低而且可以独立地改变它们之间的交互。 以下情况下可考虑使用中介者模式 一组定义良好的对象之间需要进行通信的场合想通过一个中间类来封装多个类中的行为而又不想生成太多的子类。 以下是一个具体例子联合国就是一个中介者 三、MediatR的应用场景 以下是 MediatR 的一些适用场景 CQRSCommand and Query Responsibility Segregation命令查询责任分离MediatR 可以用于实现 CQRS 架构的命令与查询分离。通过将命令和查询封装为不同的请求对象并使用中介者模式来处理这些请求可以更好地组织和管理复杂的业务逻辑。事件驱动架构Event-Driven ArchitectureMediatR 可以用于实现事件的发布和订阅模式。通过定义和处理事件通知可以实现松耦合的组件间通信以及更灵活的系统扩展和异步处理。插件化和扩展性MediatR 可以用于实现插件化和可扩展的应用程序架构。通过定义通用的请求和处理逻辑并利用中介者模式将请求和处理解耦可以方便地添加、移除和替换各种功能模块。视图模型更新View Model UpdatesMediatR 可以用于处理视图模型的更新操作。通过定义更新请求和相应的处理器可以实现对视图模型的增、删、改等操作并在更新完成后及时通知相关组件进行界面更新。领域事件和领域命令MediatR 可以用于处理领域事件和领域命令。通过定义相应的事件和命令并使用中介者模式进行处理可以有效地组织和管理领域逻辑并实现解耦、可测试和可扩展的领域模型。 总体而言MediatR适用于需要解耦请求和处理逻辑的场景能够提高代码的可读性、可维护性和可扩展性。它可以与其他架构模式如CQRS、事件驱动架构等结合使用以满足不同的业务需求和系统设计要求。 四、MediatR使用入门 开发环境 平台版本是.NET6 开发框架ASP.NET Core WebApi 开发工具Visual Studio 2022 引用MediatR的NuGet包案例版本为11.0.0 3.1 演示 request/response 请求响应模式 此案例演示一个游戏管理模块的“添加游戏”这个功能。 步骤一创建一个“”添加游戏”请求消息类需要实现IRequest,或IRequest T 接口 //引用命名空间 using MediatR;namespace MediatRWebApp.Requests {//Request类string是处理者响应的数据类型public class AddGameRequest : IRequeststring{public int GameId { get; set; } public string GameName { get; set; }public string GameType { get; set; }} }步骤二创建一个消息处理器对象需实现 IRequestHandlerAddGameRequest , string接口 using MediatR; using MediatRWebApp.Requests;namespace MediatRWebApp.RequestHandlers {//Handler类型PingRequest是其处理的请求类型string是处理者响应的数据类型public class AddGameRequestHandler : IRequestHandlerAddGameRequest, string{/// summary/// 处理AddGameRequest请求返回string类型的响应/// /summary/// param namerequest请求对象/param/// param namecancellationToken取消令牌/param/// returns/returnspublic Taskstring Handle(AddGameRequest request, CancellationToken cancellationToken){//做如下的一些处理代码略//验证输入的参数是否正确//可能还要做名称的唯一性判断//根据Request来创建一个实体对象//用仓储把他保存到数据库中return Task.FromResult(添加游戏成功);}} }步骤三在服务容器中注册AddGameRequestHandler using MediatR; using MediatRWebApp.RequestHandlers;//在Program.cs 注册AddGameRequestHandler builder.Services.AddMediatR(typeof(AddGameRequestHandler ));步骤四在控制器方法中用Mediator的Send方法发送请求对应的Request请求将由注册过的Handler来处理。 //在控制器中使用 using MediatR; using MediatRWebApp.Requests; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc;namespace MediatRWebApp.Controllers {[Route(api/[controller])][ApiController]public class GameController : ControllerBase{//构造函数注入Mediatorprivate readonly IMediator _mediator;//构造方法public GameController(IMediator mediator){_mediator mediator;}/// summary/// 添加游戏的接口方法/// /summary/// returns/returns[HttpPost]public async TaskIActionResult Add([FromBody]AddGameDto input){AddGameRequest request new AddGameRequest (){GameName input.GameName,GameType input.GameType };var response await _mediator.Send(request);return Ok(response);}} }3.2 演示 Notification 发布/订阅模式 步骤一创建一个通知对象必须继承INotification接口 using MediatR;public class DomainNotification: INotification {public DomainNotification(string message){Message message;}public string Message { get; set; } //通知的消息 }步骤二创建两个消息处理器 //步骤二创建一个消息处理器 public class DomainNotificationHandler : INotificationHandlerDomainNotification {/// summary/// 处理消息/// /summary/// param namenotification/param/// param namecancellationToken/param/// returns/returnspublic Task Handle(DomainNotification notification, CancellationToken cancellationToken){Console.WriteLine({0} 被消息处理器DomainNotificationHandler处理了, notification.Message);return Task.CompletedTask;} }//步骤二创建另一个消息处理器 public class AnotherNotificationHandler : INotificationHandlerDomainNotification {/// summary/// 处理消息/// /summary/// param namenotification/param/// param namecancellationToken/param/// returns/returnspublic Task Handle(DomainNotification notification, CancellationToken cancellationToken){Console.WriteLine({0} 被消息处理器AnotherNotificationHandler处理了, notification.Message);return Task.CompletedTask;} }步骤三通过 中介者对象 发布通知消息发布订阅模式 using MediatR; using MediatRWebApp.Notifications; using MediatRWebApp.Requests;[Route(api/[controller])][ApiController]public class PingController : ControllerBase{private readonly IMediator _mediator;//构造方法public PingController (IMediator mediator){_mediator mediator;}/// summary/// 测试方法/// /summary/// returns/returns[HttpPost]public async TaskIActionResult TestNotification(){//发送请求消息 PingRequestvar response await _mediator.Send(new PingRequest());//将通知消息广播出去订阅了DomainNotification的Handler都能够响应await _mediator.Publish(new DomainNotification(添加成功));return Ok(response);}}本文到此结束欢迎各位的支持和鼓励如果对你有帮助的话请点赞关注或者转发给需要的朋友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京做网站找谁江苏官网建设公司

前言iconfont阿里巴巴矢量图标库是我很喜欢的一个网站,可以下载/在线编辑/上传自己需要的矢量图标,也支持团队协作,那么在mpvue项目中如何引入呢?将图标加入购物车搜索关键词可以是中文也可以是英文下载素材点击网站右上角的购物车…

网站颜色 字体郑州妇科医院免费咨询

前言 又逢金三银四,拿到大厂的offer一直是程序员朋友的一个目标,我是如何拿到大厂offer的呢,今天给大家分享我拿到大厂offer的利器,前端核心知识面试宝典,内容囊括Html、CSS、Javascript、Vue、HTTP、浏览器面试题\数…

营销网站开发方案免费的推广渠道有哪些

以下总结一些不好的代码规范, 借此警示自己不要犯这种错误 注释 1.不恰当的注释 注释应该仅用来描述有关代码和设计的技术性信息。像修改历史等信息不应出现在注释中 2.废弃的注释 过时、无关或错误的注释就是废弃的注释,不要写这种注释&#xff0c…

河南送变电建设有限公司网站网店平台

概述 AP9193 是一款高效率、高精度的升 压型大功率 LED 灯恒流驱动控制芯片。 AP9193 内置高精度误差放大器,固 定关断时间控制电路,恒流驱动电路等, 特别适合大功率、多个高亮度 LED 灯的串 恒流驱动。 AP9193 采用固定关断时间的控制方 式…

游戏网站开发目的wordpress文章顺序倒叙

3 分钟快速使用 JPush Android Demo本文目的在于,指导新接触极光推送的开发者,在短短几分钟时间内把极光推送跑起来:安装 Demo 客户端到手机在 Portal 上推送通知客户端收到推送并显示在状态栏创建极光推送开发者帐号Portal 上创建应用使用注…

广西灵山县住房和城乡建设局网站wordpress上传Flickr

在刚性碰撞下,机器人的阻抗调节可以使其更好地适应外部环境。具体来说,通过建立力与位移之间的关系,并改变阻抗参数,可以控制机器人对外部力的响应。 在具体实现上,可以采用基于位置的阻抗控制或基于力的阻抗控制。基于…

快速建站全流程详细指导手册ios开发网站app

想要在Mac电脑上轻松管理和传输您的安卓设备文件吗?MacDroid Pro for Mac 是您的最佳选择!这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面,让您能够直接在Mac上…

汽车租赁网站建设内容网站建设界面建议

Elasticsearch 在 Java 开发中的应用 Elasticsearch 是一个开源的分布式搜索引擎,广泛应用于全文搜索、日志分析等场景。本文将介绍 Elasticsearch 在 Java 开发中的基本使用和一些实际场景中的应用。 1. 引入 Elasticsearch 依赖 首先,需要在 Maven 或…

中国最早做网站是谁微信小程序怎么做抽签

一、为什么要搭建自动化测试框架 测试如果按照是否手工划分,可以分为“手工测试”和“自动化测试”。 “手工测试”也就是用人力来进行功能测试。相比自动化测试而言执行效率慢,可以进行探索性测试和发散性测试。 “自动化测试”主要是通过所开发的软…

加油站顶棚网架价多少钱一平网站制作公司全域营销获客公司

在做爬虫爬取图片时,发现有的图片url是用“data:image/jpg;base64” 开头的,例如下图 部分开头样式如下: 1、data:image/jpg; base64, 2、data:image/png; base64, 3、data:image/webp;base64, 利用python进行代码进行图片下载,…

做网站要排版吗营销型网站建设比较好

在项目打包后发现有一个数组越界问题,然而无论是 Play in Editor或是 VS选为DebugGame后启动,游戏都没有任何问题,越界问题只在打包后出现。这里记录一下自己的Debug方法。 首先将项目以DebugGame配置打包: 更改打包配置&#xff…

坪地网站建设哪家好python在线编程器

Unity 引擎的收费模式和配套服务升级已经引起了广泛的关注和讨论。自 2024 年 1 月 1 日起,Unity 将根据游戏的安装量对开发者进行收费。这将会影响到很多游戏开发者和玩家。本文将探讨 Unity 引擎的收费模式和配套服务更新,以及对游戏开发者和玩家的影响…

定制家具网站建设网店

Gradient Descent for Linear Regression 1、梯度下降2、梯度下降算法的实现(1) 计算梯度(2) 梯度下降(3) 梯度下降的cost与迭代次数(4) 预测 3、绘图4、学习率 首先导入所需的库: import math, copy import numpy as np import matplotlib.pyplot as plt plt.styl…

网站策划方案实例制作公司网站 价格

昨天开始突然想在4412上面跑人QT玩,首先得跑个纯linux昨天做好第一步,把根文件系统,用make_ext4fs 打包。make_ext4fs -l 34M -s system.img minifs/然后在uboot启动命令中把启动参数修改:setenv bootargs noinitrd root/dev/mmcb…

网站设计 cdc湖南营销型网站建设磐石网络省钱

查找,又称搜索,检索。 查找运算的主要操作是关键字的比较, 通常把查找过程中的平均比较次数(也称为平均查找长度) 作为衡量一个查找算法效率优劣的标准。 平均查找长度(Average Search. Length ASL) 的计算公式为 A S L ∑ i 1 n P n C i…

网站流量刷广告公司首页

Linux Cockpit 是一个基于 Web 界面的应用,它提供了对系统的图形化管理。看下它能够控制哪些。-- Sandra Henry-stocker如果你还没有尝试过相对较新的 Linux Cockpit,你可能会对它所能做的一切感到惊讶。它是一个用户友好的基于 web 的控制台&#xff0c…

网站界面设计的发展wordpress备份到网盘

题目 给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序…

游戏网站外链建设品牌营销策略分析论文

0x01业务描述 说明: 同事搭建的业务系统,最开始使用 log4net 记录到本地日志. 然后多个项目为了日志统一,全部记录在 Elasticsearch ,使用 log4net.ElasticSearchAppender.DotNetCore. 然后搭建了 Kibanal 对 Elasticsearch 进行查询. 但是项目组开发人员众多,不是每个人…

济南公众平台网站建设建行官网个人登录

Connetction Initiation是RDP连接的第一个阶段,具体包含两个消息RDP Negotiation Request和RDP Negotiation Response,下面结合协议数据包详细分析。 (1)RDP Negotiation Request 从数据包可以清晰看到此时的协议栈依次是TCP-TPKT…

重庆长寿网站建设网站开发专员

代码随想录算法训练营第三十八天 | 理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯 理论基础什么是动态规划动态规划的解题步骤动态规划应该如何debug 509. 斐波那契数递归解法 70. 爬楼梯746. 使用最小花费爬楼梯 理论基础 视…