Pular para conteúdo

Aula 20 - Projeto Capstone: Aplicação .NET 8 Enterprise Autônoma 🏆

Objetivo Pedagógico

Objetivo: Construção de uma aplicação corporativa completa em .NET 8, com Clean Architecture, CQRS, Minimal APIs, EF Core 8, Testcontainers e documentação OpenAPI.


📑 1. Fundamentos Teóricos & Análise Técnica

O Projeto Capstone da Especialização em Sistemas com C# .NET representa a culminação das práticas corporativas mais exigidas no mercado de trabalho de tecnologia financeira e empresarial. O desafio consiste em projetar e implementar uma Plataforma de Gestão de Ordens de Compra e Liquidação de Ativos.

O projeto avalia as seguintes implementações de arquitetura: 1. Estrutura Clean Architecture com 4 Camadas: Domain (Entidades e Regras de Negócio Puras), Application (Comandos, Queries e DTOs via MediatR), Infrastructure (EF Core 8 e Provedores Externos) e Api (Minimal APIs com autenticação JWT). 2. Pipeline Centralizado com Behaviors: Validação automática de payloads com FluentValidation antes de atingir os handlers. 3. Persistência com EF Core 8: Transações ACID, soft delete com filtros globais de consulta (HasQueryFilter) e auditoria automatizada. 4. Suíte Completa de Testes: Testes de unidade com xUnit e testes de integração com banco de dados real via Testcontainers.

📐 Arquitetura Conceitual & Diagrama de Fluxo

graph TD
    Client["Client / API Gateway"] --> API["Minimal APIs (.NET 8)"]
    API --> MediatR["MediatR Pipeline (Validation & Logging)"]
    MediatR --> App["Application Layer (Commands & Queries)"]
    App --> Domain["Domain Layer (Entities & Aggregates)"]
    App --> Infra["Infrastructure Layer (EF Core 8)"]
    Infra --> DB["PostgreSQL Database"]
    style Client fill:#e1f5fe,stroke:#01579b
    style API fill:#fff3e0,stroke:#e65100
    style App fill:#e8f5e9,stroke:#2e7d32
    style Domain fill:#f3e5f5,stroke:#7b1fa2

🔍 Pilares e Diretrizes Técnicas

Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Arquitetura Corporativa Desacoplada: A camada de Domínio desconhece o banco de dados e a interface web. - Resiliência a Falhas: Implementação de retries automáticos com a biblioteca Polly em chamadas de I/O externas. - Filtros Globais de Dados: Implementação de Soft Delete automático sem necessidade de cláusulas WHERE is_deleted = false manuais. - Qualidade e Conformidade Industrial: Cobertura de testes automatizados com relatórios de execução no pipeline de CI.


🛠️ 2. Implementação Prática em C# 12, .NET 8, PostgreSQL e MediatR

Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:

// Program.cs (Minimal APIs com Injeção de MediatR em .NET 8)
using MediatR;
using Empresa.Core.Application.Orders;

var builder = WebApplication.CreateBuilder(args);

// Configuração de Serviços
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(CreateOrderCommand).Assembly));

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

// Endpoint Minimal API com Injeção de MediatR
app.MapPost("/api/v1/orders", async (CreateOrderCommand command, ISender sender) =>
{
    var orderId = await sender.Send(command);
    return Results.Created($"/api/v1/orders/{orderId}", new { id = orderId });
})
.WithName("CreateOrder")
.WithOpenApi();

app.Run();

💡 Análise Passo a Passo do Código

  1. Injeção do MediatR: builder.Services.AddMediatR(...) descobre e registra todos os handlers da aplicação por reflexão de assembly.
  2. Endpoint Declarativo: app.MapPost vincula a rota diretamente ao comando sem a sobrecarga de classes de controller.
  3. Retorno Padronizado: Results.Created gera o código HTTP 201 com o cabeçalho Location apontando para o recurso criado.

🎯 3. Próximos Passos & Sequência Didática