Especificações Gerais
A camada de infraestrutura (Infra) fornece os meios técnicos para suportar o domínio e a aplicação, encapsulando detalhes de persistência, integrações e serviços auxiliares. Seu objetivo é manter a lógica de negócio isolada de preocupações técnicas, garantindo desacoplamento e flexibilidade.
Divisão em Projetos
A camada está organizada em dois projetos principais:
-
Infra.Data
- Responsável pela persistência de dados.
- Estrutura modular com múltiplos
DbContextse repositórios específicos por escopo. - Baseada em Entity Framework Core, mas com suporte a Dapper/SQL para cenários de alta performance.
- Suporte a multi-tenancy, isolando dados por cliente/instância.
-
Infra.AiModels
- Responsável pela integração com modelos de inteligência artificial.
- Utiliza o padrão Strategy para permitir múltiplos modelos de IA sob a mesma interface.
- Centraliza a configuração de IoC (Dependency Injection) via
Extensions. - Facilita a inclusão de novos modelos de IA sem impacto nas camadas superiores.
Padrões Aplicados
- Repository Pattern
- Implementação base em EF Core (
RepositoryBase). - Repositórios específicos organizados por módulo/domínio.
- Implementação base em EF Core (
- Strategy Pattern
- Aplicado no projeto de IA, permitindo a troca de modelos dinamicamente.
- Dependency Injection (IoC)
- Configuração centralizada via
Extensions. - Serviços, repositórios e estratégias registrados no container de DI.
- Configuração centralizada via
Boas Práticas Adotadas
- Isolamento de responsabilidades → Data e AI são separados em projetos distintos.
- Flexibilidade de persistência → EF como padrão, Dapper/SQL como alternativa.
- Modularidade → tanto repositórios quanto contextos seguem uma estrutura segmentada por subdomínio.
- Escalabilidade → novos módulos, contextos ou estratégias de IA podem ser adicionados sem alterar código existente.
- Reutilização → abstrações comuns e helpers evitam duplicação de lógica técnica.
aviso
A camada de infraestrutura é um alicerce técnico do WMS. Ela não contém regras de negócio, mas oferece os recursos necessários para que o domínio e a aplicação funcionem de forma desacoplada, performática e escalável.