在没有 CQRS 的情况下使用 MediatR

问题描述 投票:0回答:2

我正在考虑在我的 .NET 7 Web 应用程序中使用 MediatR,因为我喜欢它有助于保持控制器的瘦身。这样,假设我想从具有剃刀视图的“经典”Web 应用程序切换到具有另一个前端的 .NET 7 Web API,我可以重用更多的后端代码。

在我发现的许多示例中,我看到 MediatR 与 CQRS 一起使用。命令和查询之间的分离对于我相当小的 Web 应用程序来说是一种矫枉过正。是否也可以在没有 CQRS 的情况下使用 MediatR,只是为了获得瘦控制器?

.net-core cqrs mediatr
2个回答
0
投票

如何消费 Mediator 给你的合约由你决定。您不必符合所有接口

在最简单的示例中,如果满足您的需要,您可以只触发一个命令并将所有逻辑放入其中

public async IActionResult Get(SomeCommand command)
{
    await _mediator.Send(command);
    return Ok();
}

然后你的命令可以做所有的查询

public class SomeCommandHandler : IRequestHandler<SomeCommand , bool>
{
    public SomeCommand Handler(/* Inject anything you need here, such as databases */) {}

    public Task<bool> Handle(SomeCommand command)
    {
        // Do anything you need in here
    }
}

0
投票

我正在考虑在我的 .NET 7 Web 应用程序中使用 MediatR,因为我喜欢它有助于保持控制器的精简。

MediatR 做的一件事是将依赖项注入处理程序的构造函数中——这可以节省大量代码。这实际上也可以使用 IGet 来完成,这是一个更薄的库,您可以使用它创建您需要的所有内容 - 无需 MediatR。

public void OnGet([FromServices] IGet i, int id)
{
    var result = i.Get<MyQueryHandler>().Handle(id);
    // do something with the result.
}

命令和查询之间的分离对于我相当小的 Web 应用程序来说是一种矫枉过正。是否也可以在没有 CQRS 的情况下使用 MediatR,只是为了获得瘦控制器?

是的,您可以在没有 CQRS 的情况下使用 MediatR。 MediatR 与 CQRS 没有硬性关系——尽管有些人似乎在积极交流这两者的结合。

© www.soinside.com 2019 - 2024. All rights reserved.