image

Unlimited bootcamps + English course forever

80
%OFF
Article image
Nathan Sousa
Nathan Sousa25/07/2025 12:15
Share
Randstad - Análise de DadosRecommended for youRandstad - Análise de Dados

Roadmap para evoluir no backend com .NET Web API

    🚀 Roadmap para evoluir no backend com .NET Web API

    Se você já domina o básico do C# e sabe criar uma API REST com ASP.NET, o próximo passo é sair do "CRUD básico" e adotar práticas que realmente preparam seu projeto para crescer.

    Aqui vai um resumo direto ao ponto do que estudar e aplicar:

    🔹 1. Organização por camadas

    Dividir bem as responsabilidades é essencial para manter o projeto limpo e escalável.

    Sugestão de estrutura:

    • API: camada de apresentação (controllers, endpoints, validações)
    • Application: regras de negócio e orquestração (UseCases)
    • Communication: classes de request e response (DTOs)
    • Domain: entidades e interfaces (contratos)
    • Exception: exceções personalizadas
    • Infrastructure: implementação dos repositórios e acesso a dados
    Essa separação facilita testes, manutenção e reuso.

    🔹 2. Injeção de dependência organizada

    Evite poluir suas controllers com construtores cheios de dependências. Prefira usar [FromServices] nos endpoints:

    
    [HttpPost]
    public IActionResult Criar([FromBody] PedidoDto dto, [FromServices] ICriarPedidoUseCase useCase)
    {
      useCase.Executar(dto);
      return Ok();
    }
    
    Mais limpo, direto e ideal quando o UseCase é específico daquele endpoint.

    🔹 3. Use extensões para organizar a DI

    Evite registrar todas as dependências direto no Program.cs.

    👉 Crie métodos de extensão por camada:

    
    public static class ApplicationDI
    {
      public static IServiceCollection AddApplication(this IServiceCollection services)
      {
          services.AddScoped<ICriarPedidoUseCase, CriarPedidoUseCase>();
          return services;
      }
    }
    

    E registre assim no Program.cs:

    
    builder.Services
      .AddApplication()
      .AddInfrastructure();
    
    Isso melhora a legibilidade e mantém a organização até na configuração.

    🔹 4. Aplique o padrão Repository corretamente

    Não transforme o Repository em um "repassador de métodos do EF". Ele deve encapsular a lógica de acesso a dados e expor apenas o necessário para o domínio.

    Exemplo:

    
    public interface IPedidoRepository
    {
      Task<Pedido?> ObterPorIdAsync(Guid id);
      Task AdicionarAsync(Pedido pedido);
    }
    csharp
    CopiarEditar
    public class PedidoRepository : IPedidoRepository
    {
      private readonly AppDbContext _context;
    
      public PedidoRepository(AppDbContext context)
      {
          _context = context;
      }
    
      public Task<Pedido?> ObterPorIdAsync(Guid id)
          => _context.Pedidos.AsNoTracking().FirstOrDefaultAsync(x => x.Id == id);
    
      public async Task AdicionarAsync(Pedido pedido)
      {
          await _context.Pedidos.AddAsync(pedido);
      }
    }
    
    Combine com um Unit of Work simples se o projeto crescer.

    🔹 5. UseCases: o coração da sua aplicação

    Toda regra de negócio deveria morar aqui. A controller só chama o UseCase.

    
    public interface ICriarPedidoUseCase
    {
      Task Executar(PedidoDto dto);
    }
    csharp
    CopiarEditar
    public class CriarPedidoUseCase : ICriarPedidoUseCase
    {
      private readonly IPedidoRepository _pedidoRepository;
    
      public CriarPedidoUseCase(IPedidoRepository pedidoRepository)
      {
          _pedidoRepository = pedidoRepository;
      }
    
      public async Task Executar(PedidoDto dto)
      {
          var pedido = new Pedido(dto.ClienteId, dto.Itens);
          await _pedidoRepository.AdicionarAsync(pedido);
      }
    }
    

    ✅ Conclusão

    Quer sair do básico no backend com .NET Web API?

    Foque em:

    • Separar bem as camadas (API, Application, Communication, Domain, Exception, Infrastructure)
    • Aplicar injeção limpa com [FromServices]
    • Criar extensões de DI para organizar seu projeto
    • Implementar UseCases para encapsular regras de negócio
    • Usar Repository com propósito (não apenas como ponte para o EF)

    Esse modelo tem me ajudado a manter projetos reais escaláveis e limpos.

    Se curtiu, salva e compartilha com quem quer evoluir no backend .NET também!

    Share
    Recommended for you
    GFT Start #7 .NET
    GFT Start #7 - Java
    Deal Group - AI Centric .NET
    Comments (0)
    Recommended for youRandstad - Análise de Dados