首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediatR发布和MediatR发送

MediatR发布和MediatR发送
EN

Stack Overflow用户
提问于 2020-07-31 14:12:01
回答 1查看 13K关注 0票数 16

我已经尝试过使用MediatR的CQRS模式,我喜欢应用程序正在进行转换时的干净状态。在我看到和使用的所有示例中,我总是这样做的

代码语言:javascript
复制
await Mediator.Send(command);

查询也是一样的

代码语言:javascript
复制
var data = await Mediator.Send(queryObject);

我刚刚意识到还有Mediator.Publish,在我搜索之后,它似乎也在做同样的事情。我正在尝试理解Mediator.Send和Mediator.Publish之间的区别。我已经阅读了MediatR库文档,但我仍然不明白它们之间的区别。请帮助我理解其中的区别。

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-31 14:39:32

MediatR有两种分派的消息:

  • Request/response消息,分派到单个handler
  • Notification消息,分派到多个处理程序

  • Send可能会返回响应,但不必这样做it.
  • Publish从不返回结果。

您通过_mediator.Send({command})将请求(有时称为命令)恰好发送到一个具体的处理程序。它可以是例如将新产品保存到数据库的命令。它通常是来自用户的请求(前端/API),有时也可能是系统中由其他服务以同步方式发出的内部命令。总是期望命令立即执行,并且您将收到一些正确的结果或错误,以便立即通知客户端一些失败。

您正在通过_mediator.Publish({event})将通知(通常称为事件)发布到零个、一个或多个处理程序。当您想要发布某些信息而您不知道谁需要时,您使用了通知。例如,成功将产品添加到您的仓库模块后发布的NewProductEvent。很少有其他环境想要订阅信息,例如,向客户端发送电子邮件,告知有新产品可用,或者在商店模块中为产品创建一些默认配置(可用于产品的支付和交付)。您可以以同步方式使用通知。所有数据将保存在一个事务中(产品和商店配置),或者您可以将某种异步模式与服务总线或/和一起使用。在第二种情况下(异步),当订阅您的通知的其他服务或上下文发生错误时,您必须手动处理这些情况。

示例场景:未创建默认配置。

  • 如果您有一个事务(同步方式)用于几个上下文,您将收到一个错误,记录错误并以异步方式将其返回给user/client.
  • In,您可以在将新产品保存到数据库后发送事件。您不希望产品在系统中处于半错误状态。因此,首先我建议在草稿状态下创建它,并等待通知您成功创建配置的事件,然后将状态更改为例如新建/更正等。

例如,在微软的EShopOnContainers中订购微服务:github是使用mediatR的一个很好的例子。您将看到一个使用EF核心和ASP.NET的CQRSDDD的示例。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63186625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档