Objetivo
Refatorar a estrutura atual dos pacotes do Medio para garantir separação clara de responsabilidades,
reduzindo dependências desnecessárias no pacote core e melhorando a modularidade da solução.
A intenção é tornar o core totalmente agnóstico de ASP.NET Core e de bibliotecas de validação.
Situação Atual
dotnet add package MedioPkg
dotnet add package MedioPkg.Validation
dotnet add package MedioPkg.AspNetCore
O pacote principal ainda carrega responsabilidades que deveriam estar isoladas, como:
- Integração com ASP.NET Core
- Middleware HTTP global
- Integração com FluentValidation
- Extensões específicas de WebApplication
Isso gera:
- Acoplamento desnecessário
- Dependências transitivas indesejadas
- Dificuldade de uso em aplicações não-web (Console, Worker, etc.)
- Violação do princípio de separação de responsabilidades
Nova Arquitetura Proposta
MedioPkg (Core)
Responsabilidade: Apenas mediator + pipeline.
Deve conter exclusivamente:
- IMediator
- IRequest / INotification
- Handlers
- IPipelineBehavior
- Implementações base
- AddMedio(...)
- Extensions genéricas
Regras:
- ❌ Não pode referenciar Microsoft.AspNetCore.*
- ❌ Não pode referenciar FluentValidation
- ❌ Não pode conter middleware HTTP
- ❌ Não pode depender de abstrações de Web
Deve ser compatível com:
- Console apps
- Worker Services
- Background jobs
- ASP.NET (sem forçar dependência)
MedioPkg.Validation
Responsabilidade: Integração com FluentValidation.
Deve conter:
- ValidationBehavior<TRequest, TResponse>
- AddMedioValidation(...)
- Integração com FluentValidation
Regras:
- ✔ Depende de MedioPkg
- ✔ Depende de FluentValidation
- ❌ Não depende de ASP.NET Core
- ❌ Não contém middleware
A validação deve continuar sendo executada via pipeline behavior.
MedioPkg.AspNetCore
Responsabilidade: Integrações específicas com ASP.NET Core.
Deve conter:
- Middleware global (UseMedio)
- Tratamento de exceções HTTP
- Extensões específicas de WebApplication / IApplicationBuilder
Regras:
- ✔ Depende de MedioPkg
- ❌ Não depende de FluentValidation
- ✔ Pode depender de Microsoft.AspNetCore.*
Impacto Esperado
| Tipo de Projeto |
Pacotes Necessários |
| Console / Worker |
MedioPkg |
| ASP.NET Core |
MedioPkg + MedioPkg.AspNetCore |
| ASP.NET + Validation |
MedioPkg + MedioPkg.Validation + MedioPkg.AspNetCore |
Critérios Técnicos de Aceite
- MedioPkg não possui referência a Microsoft.AspNetCore.*
- MedioPkg não possui referência a FluentValidation
- MedioPkg.Validation depende apenas de MedioPkg
- MedioPkg.AspNetCore depende apenas de MedioPkg
- Nenhuma dependência circular
- Build independente de cada pacote
- Testes continuam passando
- Breaking changes documentadas (se houver)
Diretrizes para Contribuição
- Manter compatibilidade com .NET LTS suportado
- Não introduzir novas dependências externas no Core
- Evitar reflection desnecessária
- Manter baixo overhead no pipeline
- Seguir padrão atual de organização de pastas
- Atualizar README e exemplos após refatoração
Motivação Arquitetural
- Princípio da Inversão de Dependência
- Single Responsibility Principle
- Clean Architecture
- Modular Monolith Design
Essa mudança melhora a modularidade, reduz dependências transitivas e torna o ecossistema Medio mais escalável.
Objetivo
Refatorar a estrutura atual dos pacotes do Medio para garantir separação clara de responsabilidades, reduzindo dependências desnecessárias no pacote core e melhorando a modularidade da solução.
A intenção é tornar o core totalmente agnóstico de ASP.NET Core e de bibliotecas de validação.
Situação Atual
O pacote principal ainda carrega responsabilidades que deveriam estar isoladas, como:
Isso gera:
Nova Arquitetura Proposta
MedioPkg (Core)
Responsabilidade: Apenas mediator + pipeline.
Deve conter exclusivamente:
Regras:
Deve ser compatível com:
MedioPkg.Validation
Responsabilidade: Integração com FluentValidation.
Deve conter:
Regras:
A validação deve continuar sendo executada via pipeline behavior.
MedioPkg.AspNetCore
Responsabilidade: Integrações específicas com ASP.NET Core.
Deve conter:
Regras:
Impacto Esperado
Critérios Técnicos de Aceite
Diretrizes para Contribuição
Motivação Arquitetural
Essa mudança melhora a modularidade, reduz dependências transitivas e torna o ecossistema Medio mais escalável.