https://github.com/marcus-v-freitas/mvfc.mediator
Uma biblioteca leve para implementação do padrão Mediator em .NET, facilitando a comunicação entre componentes e promovendo desacoplamento.
https://github.com/marcus-v-freitas/mvfc.mediator
csharp dependency-injection design-pattern dotnet mediator net9 test
Last synced: 4 months ago
JSON representation
Uma biblioteca leve para implementação do padrão Mediator em .NET, facilitando a comunicação entre componentes e promovendo desacoplamento.
- Host: GitHub
- URL: https://github.com/marcus-v-freitas/mvfc.mediator
- Owner: Marcus-V-Freitas
- License: mit
- Created: 2025-10-27T22:58:43.000Z (9 months ago)
- Default Branch: master
- Last Pushed: 2025-10-27T23:11:00.000Z (9 months ago)
- Last Synced: 2025-10-28T01:11:41.962Z (9 months ago)
- Topics: csharp, dependency-injection, design-pattern, dotnet, mediator, net9, test
- Language: C#
- Homepage: https://www.nuget.org/packages/MVFC.Mediator
- Size: 683 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# MVFC.Mediator
MVFC.Mediator é uma biblioteca .NET que implementa o padrão Mediator, promovendo a comunicação desacoplada entre componentes de uma aplicação. O Mediator centraliza o envio de comandos e eventos, facilitando a manutenção e evolução do código.
## Visão Geral
O padrão Mediator permite que objetos se comuniquem sem depender diretamente uns dos outros, reduzindo o acoplamento e tornando o sistema mais modular. MVFC.Mediator abstrai essa comunicação por meio de interfaces e handlers.
## Principais Componentes
- **ICommand**: Interface base para comandos, representando uma solicitação de ação.
- **ICommandHandler**: Interface para handlers responsáveis por processar comandos específicos.
- **IMediator**: Interface que define o contrato para envio de comandos e publicação de eventos.
- **Mediator**: Implementação concreta do IMediator, responsável por resolver e invocar os handlers.
## Recursos
- Suporte à injeção de dependências para handlers
- Facilidade de integração em projetos .NET (Console, WebAPI, etc.)
- Extensível para eventos, notificações e queries
- Benchmarks e testes automatizados
## Instalação
Adicione o projeto como referência em sua solução ou instale via NuGet (se disponível):
```shell
dotnet add package MVFC.Mediator
```
## Exemplo de Uso
Adicionar injeção de independência
```csharp
builder.Services.AddMediator();
builder.Services.AddValidatorsFromAssemblyContaining();
```
Definir o Retorno
```csharp
public sealed record class CreateUserResponse(Guid UserId, string Name, string Email, DateTime CreatedAt);
```
Defina um comando:
```csharp
public sealed record class CreateUserCommand(string Name, string Email, int Age) :
ICommand;
```
Implemente o handler:
```csharp
public sealed class CreateUserCommandHandler(ILogger logger) :
ICommandHandler
{
private readonly ILogger _logger = logger;
public async ValueTask Handle(CreateUserCommand command, CancellationToken cancellationToken = default)
{
_logger.LogInformation("Criando usuário: {Name}", command.Name);
var userId = Guid.NewGuid();
var createdAt = DateTime.UtcNow;
await Task.Delay(TimeSpan.FromMilliseconds(1), cancellationToken);
return new CreateUserResponse(userId, command.Name, command.Email, createdAt);
}
}
```
Envie o comando via Mediator:
```csharp
endpoints.MapPost("/api/users", async (IMediator mediator, CreateUserCommand command, CancellationToken ct) =>
{
var response = await mediator.Send(command, ct);
return Results.Created($"/api/users/{response.UserId}", response);
})
.Produces(StatusCodes.Status201Created)
.Produces(StatusCodes.Status422UnprocessableEntity);
```
## Estrutura do Projeto
- [`ICommand`](ICommand.cs): Interface para comandos.
- [`ICommandHandler`](ICommandHandler.cs): Interface para handlers de comandos.
- [`IMediator`](IMediator.cs): Contrato do mediator.
## Testes e Benchmarks
Os testes e benchmarks estão no [Report](./BenchmarkDotNet.Artifacts/results/MVFC.Mediator.Tests.RealWorldScenarioBenchmark-report-github.md), garantindo performance e confiabilidade.
```
BenchmarkDotNet v0.15.4, Windows 11 (10.0.26200.6901)
12th Gen Intel Core i5-12500H 2.50GHz, 1 CPU, 16 logical and 12 physical cores
.NET SDK 9.0.302
[Host] : .NET 9.0.7 (9.0.7, 9.0.725.31616), X64 RyuJIT x86-64-v3
Job-NTRUNJ : .NET 9.0.7 (9.0.7, 9.0.725.31616), X64 RyuJIT x86-64-v3
IterationCount=5 WarmupCount=3
```
| Method | Mean | Error | StdDev | Gen0 | Allocated |
|---------------------------------------- |----------:|----------:|----------:|-------:|----------:|
| 'Simula request HTTP individual' | 1.364 μs | 0.2325 μs | 0.0604 μs | 0.4272 | 3.97 KB |
| 'Simula múltiplos requests em paralelo' | 13.688 μs | 2.2724 μs | 0.3517 μs | 4.3335 | 40.15 KB |
## Licença
Este projeto está sob a licença MIT.