Skip to content

Refactor: Modularização dos pacotes Medio para reduzir acoplamento e dependências externas #6

@net0well

Description

@net0well

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions