{"id":32664084,"url":"https://github.com/marcus-v-freitas/mvfc.mediator","last_synced_at":"2026-04-02T22:25:41.654Z","repository":{"id":321131059,"uuid":"1084605769","full_name":"Marcus-V-Freitas/MVFC.Mediator","owner":"Marcus-V-Freitas","description":"Uma biblioteca leve para implementação do padrão Mediator em .NET, facilitando a comunicação entre componentes e promovendo desacoplamento.","archived":false,"fork":false,"pushed_at":"2025-10-27T23:11:00.000Z","size":699,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-28T01:11:41.962Z","etag":null,"topics":["csharp","dependency-injection","design-pattern","dotnet","mediator","net9","test"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/MVFC.Mediator","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Marcus-V-Freitas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-27T22:58:43.000Z","updated_at":"2025-10-27T23:10:42.000Z","dependencies_parsed_at":"2025-10-28T01:11:49.122Z","dependency_job_id":"317e660d-6d11-4786-848f-2162fbb43a87","html_url":"https://github.com/Marcus-V-Freitas/MVFC.Mediator","commit_stats":null,"previous_names":["marcus-v-freitas/mvfc.mediator"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Marcus-V-Freitas/MVFC.Mediator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcus-V-Freitas%2FMVFC.Mediator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcus-V-Freitas%2FMVFC.Mediator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcus-V-Freitas%2FMVFC.Mediator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcus-V-Freitas%2FMVFC.Mediator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Marcus-V-Freitas","download_url":"https://codeload.github.com/Marcus-V-Freitas/MVFC.Mediator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Marcus-V-Freitas%2FMVFC.Mediator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282070789,"owners_count":26608933,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-31T02:00:07.401Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","dependency-injection","design-pattern","dotnet","mediator","net9","test"],"created_at":"2025-10-31T23:01:19.063Z","updated_at":"2025-10-31T23:02:52.005Z","avatar_url":"https://github.com/Marcus-V-Freitas.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MVFC.Mediator\n\nMVFC.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.\n\n## Visão Geral\n\nO 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.\n\n## Principais Componentes\n\n- **ICommand**: Interface base para comandos, representando uma solicitação de ação.\n- **ICommandHandler**: Interface para handlers responsáveis por processar comandos específicos.\n- **IMediator**: Interface que define o contrato para envio de comandos e publicação de eventos.\n- **Mediator**: Implementação concreta do IMediator, responsável por resolver e invocar os handlers.\n\n## Recursos\n\n- Suporte à injeção de dependências para handlers\n- Facilidade de integração em projetos .NET (Console, WebAPI, etc.)\n- Extensível para eventos, notificações e queries\n- Benchmarks e testes automatizados\n\n## Instalação\n\nAdicione o projeto como referência em sua solução ou instale via NuGet (se disponível):\n\n```shell\ndotnet add package MVFC.Mediator\n```\n\n## Exemplo de Uso\n\nAdicionar injeção de independência\n\n```csharp\nbuilder.Services.AddMediator();\nbuilder.Services.AddValidatorsFromAssemblyContaining\u003cProgram\u003e();\n```\n\nDefinir o Retorno\n\n```csharp\npublic sealed record class CreateUserResponse(Guid UserId, string Name, string Email, DateTime CreatedAt);\n```\n\nDefina um comando:\n\n```csharp\npublic sealed record class CreateUserCommand(string Name, string Email, int Age) : \n    ICommand\u003cCreateUserResponse\u003e;\n```\n\nImplemente o handler:\n\n```csharp\npublic sealed class CreateUserCommandHandler(ILogger\u003cCreateUserCommandHandler\u003e logger) : \nICommandHandler\u003cCreateUserCommand, CreateUserResponse\u003e\n{\n    private readonly ILogger\u003cCreateUserCommandHandler\u003e _logger = logger;\n\n    public async ValueTask\u003cCreateUserResponse\u003e Handle(CreateUserCommand command, CancellationToken cancellationToken = default)\n    {\n        _logger.LogInformation(\"Criando usuário: {Name}\", command.Name);\n\n        var userId = Guid.NewGuid();\n        var createdAt = DateTime.UtcNow;\n\n        await Task.Delay(TimeSpan.FromMilliseconds(1), cancellationToken);\n\n        return new CreateUserResponse(userId, command.Name, command.Email, createdAt);\n    }\n}\n```\n\nEnvie o comando via Mediator:\n\n```csharp\nendpoints.MapPost(\"/api/users\", async (IMediator mediator, CreateUserCommand command, CancellationToken ct) =\u003e\n{\n    var response = await mediator.Send\u003cCreateUserCommand, CreateUserResponse\u003e(command, ct);\n    return Results.Created($\"/api/users/{response.UserId}\", response);\n})\n.Produces\u003cCreateUserResponse\u003e(StatusCodes.Status201Created)\n.Produces\u003cProblemDetails\u003e(StatusCodes.Status422UnprocessableEntity);\n```\n\n## Estrutura do Projeto\n\n- [`ICommand`](ICommand.cs): Interface para comandos.\n- [`ICommandHandler`](ICommandHandler.cs): Interface para handlers de comandos.\n- [`IMediator`](IMediator.cs): Contrato do mediator.\n\n## Testes e Benchmarks\n\nOs testes e benchmarks estão no [Report](./BenchmarkDotNet.Artifacts/results/MVFC.Mediator.Tests.RealWorldScenarioBenchmark-report-github.md), garantindo performance e confiabilidade.\n\n```\n\nBenchmarkDotNet v0.15.4, Windows 11 (10.0.26200.6901)\n12th Gen Intel Core i5-12500H 2.50GHz, 1 CPU, 16 logical and 12 physical cores\n.NET SDK 9.0.302\n  [Host]     : .NET 9.0.7 (9.0.7, 9.0.725.31616), X64 RyuJIT x86-64-v3\n  Job-NTRUNJ : .NET 9.0.7 (9.0.7, 9.0.725.31616), X64 RyuJIT x86-64-v3\n\nIterationCount=5  WarmupCount=3  \n\n```\n| Method                                  | Mean      | Error     | StdDev    | Gen0   | Allocated |\n|---------------------------------------- |----------:|----------:|----------:|-------:|----------:|\n| \u0026#39;Simula request HTTP individual\u0026#39;        |  1.364 μs | 0.2325 μs | 0.0604 μs | 0.4272 |   3.97 KB |\n| \u0026#39;Simula múltiplos requests em paralelo\u0026#39; | 13.688 μs | 2.2724 μs | 0.3517 μs | 4.3335 |  40.15 KB |\n\n\n## Licença\n\nEste projeto está sob a licença MIT.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcus-v-freitas%2Fmvfc.mediator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcus-v-freitas%2Fmvfc.mediator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcus-v-freitas%2Fmvfc.mediator/lists"}