Aula 17 - .NET 8+ Avançado com Arquitetura Limpa e MediatR 🔷
Objetivo Pedagógico
Objetivo: Arquitetura corporativa em .NET 8 com Clean Architecture, padrão CQRS com MediatR, Minimal APIs de alta velocidade e validação com FluentValidation.
📑 1. Fundamentos Teóricos & Análise Técnica
O desenvolvimento moderno na plataforma .NET 8 combina os novos recursos da linguagem C# 12 com os princípios da Clean Architecture (Arquitetura Limpa) proposta por Robert C. Martin. O objetivo central é isolar as regras de negócio de detalhes voláteis como frameworks web, bibliotecas de interface ou motores de bancos de dados.
Os pilares da implementação moderna em .NET: 1. Padrão CQRS (Command Query Responsibility Segregation): Separação estrita entre operações de leitura (Queries) e operações de escrita (Commands). As leituras podem ser otimizadas com consultas diretas (via Dapper ou queries no-tracking), enquanto os comandos executam regras de negócio através de agregados de domínio. 2. MediatR e Pipeline Behaviors: O padrão Mediator desacopla os endpoints web dos handlers de negócio. Middlewares de pipeline interceptam as mensagens para executar validação com FluentValidation, telemetria e transações de forma transversal. 3. Minimal APIs: Endpoints diretos configurados via expressões lambda (app.MapPost(...)), dispensando a sobrecarga de reflexão de controllers tradicionais e acelerando o throughput de requisições.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph LR
Client["Requisição HTTP: POST /orders"] --> MinimalAPI["Minimal API Endpoint"]
MinimalAPI --> MediatR["MediatR (ISender.Send)"]
MediatR --> Pipeline["ValidationBehavior (FluentValidation)"]
Pipeline --> Handler["CreateOrderCommandHandler"]
Handler --> Domain["Domain Entities & Rules"]
Handler --> Repo["IOrderRepository"]
style Client fill:#e1f5fe,stroke:#01579b
style MinimalAPI fill:#fff3e0,stroke:#e65100
style Pipeline fill:#ffebee,stroke:#c62828
style Handler fill:#e8f5e9,stroke:#2e7d32 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Separação CQRS: Modelos de leitura e escrita independentes para máxima escalabilidade. - Pipeline Behaviors do MediatR: Interceptação transversal para validação, logging e tratamento de exceções. - Minimal APIs de Alto Rendimento: Geração de código eficiente em tempo de compilação sem reflexão desnecessária. - Inversão de Dependências: O núcleo de domínio (Domain) possui zero dependências de bibliotecas externas.
🛠️ 2. Implementação Prática em C# 12, .NET 8 e Clean Architecture
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// CreateOrderCommand.cs (Comando CQRS com MediatR e C# 12)
using MediatR;
using FluentValidation;
namespace Empresa.Core.Application.Orders;
// 1. Comando CQRS como Record Imutável
public record CreateOrderCommand(string CustomerId, decimal TotalAmount) : IRequest<Guid>;
// 2. Validador com FluentValidation
public class CreateOrderCommandValidator : AbstractValidator<CreateOrderCommand>
{
public CreateOrderCommandValidator()
{
RuleFor(x => x.CustomerId).NotEmpty().WithMessage("ID do cliente é obrigatório.");
RuleFor(x => x.TotalAmount).GreaterThan(0).WithMessage("O valor total deve ser positivo.");
}
}
// 3. Handler com Injeção de Dependência
public class CreateOrderCommandHandler : IRequestHandler<CreateOrderCommand, Guid>
{
public async Task<Guid> Handle(CreateOrderCommand request, CancellationToken cancellationToken)
{
// Regra de negócio isolada
var orderId = Guid.NewGuid();
Console.WriteLine($"[Domain] Pedido {orderId} criado para cliente {request.CustomerId}");
return await Task.FromResult(orderId);
}
}
💡 Análise Passo a Passo do Código
- Record Imutável C# 12:
public record CreateOrderCommand(...)define o contrato de entrada com imutabilidade e igualdade por valor nativa. - Validador FluentValidation: Regras declarativas separadas da classe do comando, executadas automaticamente pelo pipeline do MediatR.
- Manipulador IRequestHandler: Processa o comando e retorna o ID gerado sem conhecimento de protocolos de transporte (HTTP, gRPC ou fila).
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto