Pular para o conteúdo
Skillpedia
APIs e servidores (backend)41 mil · #4860

dotnet-backend-patterns

Faz seu agente dominar padrões de desenvolvimento backend em C#/.NET. É útil para criar APIs robustas, gerenciar dados e construir aplicações empresariais eficientes.

O que ela faz

Esta habilidade ajuda você a entender e aplicar as melhores práticas de programação para criar sistemas robustos em .NET (a linguagem C#). Ela cobre desde a organização do código até como lidar com tarefas assíncronas e configurar seu aplicativo.

Quando usar

  • ✓Ao iniciar um novo projeto backend em .NET.
  • ✓Ao revisar o código C# para garantir qualidade.
  • ✓Ao projetar a estrutura de APIs e serviços.

Exemplo do que pedir para a IA

“Como posso organizar meu projeto .NET seguindo a arquitetura limpa?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/wshobson/agents/blob/main/plugins/dotnet-contribution/skills/dotnet-backend-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/dotnet-contribution/skills/dotnet-backend-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A habilidade explica conceitos como a estrutura de pastas (Clean Architecture), como injetar dependências (Dependency Injection) para tornar o código mais flexível e como usar `async/await` para lidar com operações que levam tempo sem travar o sistema.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add wshobson/agents --skill dotnet-backend-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/dotnet-contribution/skills/dotnet-backend-patterns/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Desenvolvimento de Backend .NET

Domine padrões C#/.NET para construir APIs de produção, servidores MCP e backends corporativos com as melhores práticas modernas (2024/2025).

Quando Usar Esta Habilidade

  • Desenvolvendo novas APIs Web .NET ou servidores MCP
  • Revisando código C# para qualidade e desempenho
  • Projetando arquiteturas de serviço com injeção de dependência
  • Implementando estratégias de cache com Redis
  • Escrevendo testes unitários e de integração
  • Otimizando o acesso ao banco de dados com EF Core ou Dapper
  • Configurando aplicações com o padrão IOptions
  • Tratando erros e implementando padrões de resiliência

Conceitos Principais

1. Estrutura do Projeto (Arquitetura Limpa)

src/
├── Domain/                     # Core business logic (no dependencies)
│   ├── Entities/
│   ├── Interfaces/
│   ├── Exceptions/
│   └── ValueObjects/
├── Application/                # Use cases, DTOs, validation
│   ├── Services/
│   ├── DTOs/
│   ├── Validators/
│   └── Interfaces/
├── Infrastructure/             # External implementations
│   ├── Data/                   # EF Core, Dapper repositories
│   ├── Caching/                # Redis, Memory cache
│   ├── External/               # HTTP clients, third-party APIs
│   └── DependencyInjection/    # Service registration
└── Api/                        # Entry point
    ├── Controllers/            # Or MinimalAPI endpoints
    ├── Middleware/
    ├── Filters/
    └── Program.cs

2. Padrões de Injeção de Dependência

// Service registration by lifetime
public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddApplicationServices(
        this IServiceCollection services,
        IConfiguration configuration)
    {
        // Scoped: One instance per HTTP request
        services.AddScoped<IProductService, ProductService>();
        services.AddScoped<IOrderService, OrderService>();

        // Singleton: One instance for app lifetime
        services.AddSingleton<ICacheService, RedisCacheService>();
        services.AddSingleton<IConnectionMultiplexer>(_ =>
            ConnectionMultiplexer.Connect(configuration["Redis:Connection"]!));

        // Transient: New instance every time
        services.AddTransient<IValidator<CreateOrderRequest>, CreateOrderValidator>();

        // Options pattern for configuration
        services.Configure<CatalogOptions>(configuration.GetSection("Catalog"));
        services.Configure<RedisOptions>(configuration.GetSection("Redis"));

        // Factory pattern for conditional creation
        services.AddScoped<IPriceCalculator>(sp =>
        {
            var options = sp.GetRequiredService<IOptions<PricingOptions>>().Value;
            return options.UseNewEngine
                ? sp.GetRequiredService<NewPriceCalculator>()
                : sp.GetRequiredService<LegacyPriceCalculator>();
        });

        // Keyed services (.NET 8+)
        services.AddKeyedScoped<IPaymentProcessor, StripeProcessor>("stripe");
        services.AddKeyedScoped<IPaymentProcessor, PayPalProcessor>("paypal");

        return services;
    }
}

// Usage with keyed services
public class CheckoutService
{
    public CheckoutService(
        [FromKeyedServices("stripe")] IPaymentProcessor stripeProcessor)
    {
        _processor = stripeProcessor;
    }
}

3. Padrões Async/Await

// ✅ CORRETO: Async em toda a cadeia
public async Task<Product> GetProductAsync(string id, CancellationToken ct = default)
{
    return await _repository.GetByIdAsync(id, ct);
}

// ✅ CORRETO: Execução paralela com WhenAll
public async Task<(Stock, Price)> GetStockAndPriceAsync(
    string productId,
    CancellationToken ct = default)
{
    var stockTask = _stockService.GetAsync(productId, ct);
    var priceTask = _priceService.GetAsync(productId, ct);

    await Task.WhenAll(stockTask, priceTask);

    return (await stockTask, await priceTask);
}

// ✅ CORRETO: ConfigureAwait em bibliotecas
public async Task<T> LibraryMethodAsync<T>(CancellationToken ct = default)
{
    var result = await _httpClient.GetAsync(url, ct).ConfigureAwait(false);
    return await result.Content.ReadFromJsonAsync<T>(ct).ConfigureAwait(false);
}

// ✅ CORRETO: ValueTask para caminhos quentes com cache
public ValueTask<Product?> GetCachedProductAsync(string id)
{
    if (_cache.TryGetValue(id, out Product? product))
        return ValueTask.FromResult(product);

    return new ValueTask<Product?>(GetFromDatabaseAsync(id));
}

// ❌ ERRADO: Bloqueando em async (risco de deadlock)

…
Perguntas frequentes

O que é 'Dependency Injection'?

É uma técnica onde as dependências (outras partes do código que um componente precisa) são fornecidas de fora, em vez de serem criadas dentro do próprio componente. Isso torna o código mais fácil de testar e modificar.

Por que usar 'async/await'?

Para que seu programa possa fazer outras coisas enquanto espera por operações demoradas, como acessar um banco de dados ou chamar um serviço externo. Isso melhora a responsividade e o desempenho.

O que é 'Clean Architecture'?

É uma forma de organizar o código em camadas, separando as responsabilidades. A ideia é manter a lógica principal do negócio isolada de detalhes externos como bancos de dados ou interfaces de usuário.

Detalhes

Descrição original do autor

Master C#/.NET backend development patterns for building robust APIs, MCP servers, and enterprise applications. Covers async/await, dependency injection, Entity Framework Core, Dapper, configuration, caching, and testing with xUnit. Use when developing .NET backends, reviewing C# code, or designing API architectures.

repo: wshobson/agents

Popularidade

Estrelas no GitHub
41 mil
Posição no ranking
#4860
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas