utilizando a biblioteca mediatr com asp net core

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.