gpt4 book ai didi

c# - MediatR 发布和 MediatR 发送

转载 作者:行者123 更新时间:2023-12-03 16:41:29 28 4
gpt4 key购买 nike

我已经使用 MediatR 尝试了 CQRS 模式,并且我喜欢应用程序正在转换的干净状态。
在我见过和使用过的所有例子中,我总是这样做

await Mediator.Send(command);
查询也一样
var data = await Mediator.Send(queryObject);
我刚刚意识到还有 Mediator.Publish 在搜索后似乎我正在做同样的事情。我试图了解 Mediator.Send 和 Mediator.Publish 之间的区别是什么。
我已经阅读了 MediatR 库文档,但我仍然不明白它们之间有什么区别。
请帮助我理解其中的区别。
谢谢你的帮助

最佳答案

MediatR has two kinds of messages it dispatches:

  • Request/response messages, dispatched to a single handler
  • Notification messages, dispatched to multiple handlers

  • Send可能会返回响应,但不必这样做。
  • Publish永远不要返回结果。

  • 您正在通过 _mediator.Send({command}) 发送请求(有时称为命令)到一个具体的处理程序。它可能是例如将新产品保存到数据库的命令。它通常是来自用户(前端/API)的请求,或者有时可能是其他服务以同步方式提供的系统内部命令。总是期望该命令将立即执行,并且您将收到一些正确的结果或错误以立即通知客户端一些失败。
    您正在通过 _mediator.Publish({event}) 发布通知(通常称为事件)零,一个或多个处理程序。当您想发布一些信息但您不知道谁需要它时,您使用了通知。例如。 NewProductEvent在成功将产品添加到您的仓库模块后发布。很少有其他上下文想要订阅信息,例如向客户发送新产品可用的电子邮件或在您的商店模块中为该产品创建一些默认配置(该产品可以付款和交付)。您可以以同步方式使用通知。所有数据都将保存在一个事务中(产品和商店配置),或者您可以使用一些异步模式与服务总线或/和 sagas .在第二种情况(异步)中,您必须手动处理在订阅您的通知的其他服务或上下文中发生错误的情况。
    示例场景:未创建默认配置。
  • 如果您有几个上下文的一个事务(同步方式),您将收到一个错误,记录错误并将其返回给用户/客户端。
  • 以异步方式,您在将新产品保存到数据库后发送事件。您不希望产品在系统中处于半错误状态。因此,首先我建议在 Draft 状态下创建它并等待通知您成功创建配置的事件,然后将状态更改为例如 New/Correct 等。

  • 使用 mediatR 的一个很好的例子,你可以在例如在 EShopOnContainers 中订购微服务微软: github .您将看到 CQRS 的示例用法和 DDD与 EF 核心和 ASP 网络。

    关于c# - MediatR 发布和 MediatR 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63186625/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com