O uso da biblioteca MediatR com ASP.NET Core tem se tornado cada vez mais comum no desenvolvimento de aplicações web. Essa biblioteca, que implementa o padrão Mediator, oferece uma maneira elegante e eficiente de lidar com a comunicação entre diferentes partes de um sistema, promovendo a separação de preocupações e facilitando a manutenção do código.
O que é o padrão Mediator?
O padrão Mediator é um padrão de projeto que tem como objetivo centralizar a comunicação entre diferentes objetos de um sistema. Ele define um objeto central, chamado de Mediator, que é responsável por receber as mensagens e encaminhá-las para os objetos interessados em processá-las. Dessa forma, os objetos não precisam conhecer uns aos outros, reduzindo o acoplamento e facilitando a adição de novos componentes.
No contexto do ASP.NET Core, a biblioteca MediatR implementa esse padrão, fornecendo uma maneira simples e flexível de lidar com a comunicação entre os diferentes componentes de uma aplicação. Ela permite que os objetos enviem mensagens para o Mediator, que por sua vez as encaminha para os handlers registrados para processá-las.
Como utilizar o MediatR com ASP.NET Core?
Para utilizar o MediatR em uma aplicação ASP.NET Core, é necessário seguir alguns passos. Primeiramente, é preciso instalar a biblioteca MediatR através do NuGet. Para isso, basta abrir o console do NuGet e executar o comando:
Install-Package MediatR
Após a instalação, é necessário registrar o MediatR no container de injeção de dependências do ASP.NET Core. Isso pode ser feito no método ConfigureServices
da classe Startup
, da seguinte forma:
services.AddMediatR(typeof(Startup));
Esse código irá registrar o MediatR e todos os handlers presentes no assembly onde a classe Startup
está localizada. Caso os handlers estejam em um assembly diferente, é necessário passar o tipo de um handler como parâmetro para o método AddMediatR
.
Definindo comandos e queries
No MediatR, as mensagens enviadas para o Mediator são chamadas de comandos e queries. Os comandos representam ações que devem ser executadas, enquanto as queries representam consultas que devem ser realizadas. Ambos podem conter parâmetros e retornar resultados.
Para definir um comando ou query, basta criar uma classe que implemente a interface IRequest
ou IRequest<TResponse>
, respectivamente. Por exemplo:
public class CriarUsuarioCommand : IRequest<bool>
Nesse exemplo, a classe CriarUsuarioCommand
representa um comando que recebe os dados de um usuário e retorna um valor booleano indicando se a operação foi bem-sucedida ou não.
Implementando handlers
Os handlers são responsáveis por processar os comandos e queries. Para implementar um handler, basta criar uma classe que implemente a interface IRequestHandler
ou IRequestHandler<TRequest, TResponse>
, respectivamente. Por exemplo:
public class CriarUsuarioCommandHandler : IRequestHandler<CriarUsuarioCommand, bool>
Nesse exemplo, a classe CriarUsuarioCommandHandler
é responsável por processar o comando CriarUsuarioCommand
e retornar um valor booleano.
Para que o MediatR saiba qual handler deve ser utilizado para processar cada comando ou query, é necessário registrar os handlers no container de injeção de dependências. Isso pode ser feito no método ConfigureServices
da classe Startup
, da seguinte forma:
services.AddMediatR(typeof(Startup).Assembly);
Enviando comandos e queries
Para enviar um comando ou query para o Mediator, basta injetá-lo no construtor de uma classe e chamá-lo através do método Send
ou SendAsync
. Por exemplo:
public class UsuarioService
{
private readonly IMediator _mediator;
public UsuarioService(IMediator mediator)
{
_mediator = mediator;
}
public async Task<bool> CriarUsuario(CriarUsuarioCommand command)
{
return await _mediator.Send(command);
}
}
Nesse exemplo, a classe UsuarioService
recebe o Mediator no construtor e utiliza-o para enviar o comando CriarUsuarioCommand
.
Vantagens do uso do MediatR
O uso do MediatR traz diversas vantagens para o desenvolvimento de aplicações ASP.NET Core. Algumas delas são:
Separation of Concerns: O MediatR promove a separação de preocupações ao centralizar a comunicação entre os diferentes componentes de um sistema. Isso facilita a manutenção do código, uma vez que cada objeto é responsável apenas por uma tarefa específica.
Reusabilidade de código: Os handlers do MediatR podem ser facilmente reutilizados em diferentes partes do sistema. Isso evita a duplicação de código e facilita a implementação de novas funcionalidades.
Testabilidade: O MediatR facilita a criação de testes unitários, uma vez que os handlers podem ser testados isoladamente, sem a necessidade de criar todos os objetos envolvidos na comunicação.
Flexibilidade: O MediatR permite que novos handlers sejam adicionados ao sistema de forma simples e flexível. Isso facilita a implementação de novas funcionalidades e a adaptação do sistema a novos requisitos.
Conclusão
O uso da biblioteca MediatR com ASP.NET Core é uma excelente opção para lidar com a comunicação entre os diferentes componentes de uma aplicação web. Ela oferece uma maneira elegante e eficiente de implementar o padrão Mediator, promovendo a separação de preocupações e facilitando a manutenção do código. Além disso, o MediatR traz diversas vantagens, como a separação de preocupações, a reusabilidade de código, a testabilidade e a flexibilidade. Portanto, se você está desenvolvendo uma aplicação ASP.NET Core, considere utilizar o MediatR para melhorar a organização e a manutenibilidade do seu código.