|
Este artigo é para quem não usa o arquivo CLAUDE.md com o Claude Code e também para quem usa mas não sabe muito bem o que esta fazendo. |
.md)
colocado na raiz de um projeto para fornecer instruções persistentes, contexto
operacional e regras de desenvolvimento lidas automaticamente pelo assistente de
IA
Claude Code
no início de cada sessão.

CLAUDE.md bem
configurado pode melhorar a precisão da IA na escrita de código entre 5% e 10%.
Na prática, com um arquivo elaborado de forma intencional, os ganhos parecem
muito maiores.
## Tech Stack **Backend (.NET)** - .NET 10 SDK / C# 14 - ASP.NET Core Web API (Minimal APIs) - Entity Framework Core 10 (SQL Server) - FluentValidation & MediatR (CQRS) - xUnit & FluentAssertions (Testes) |
| ## Estrutura do
Projeto src/ ├── Core/ │ ├── Domain/ # Entidades, Objetos de Valor, Eventos de Domínio │ └── Application/ # Casos de Uso, Commands, Queries, DTOs (MediatR) ├── Infrastructure/ # DbContext, Mapeamentos EF Core, Repositórios └── API/ # Endpoints (Minimal APIs), Middlewares, Extensions |
## Padrão para Handlers do MediatR e EF Core ✅ Padrão Correto: ```csharp public sealed class GetCustomerByIdQueryHandler(AppDbContext context, ILogger<GetCustomerByIdQueryHandler> logger) : IRequestHandler<GetCustomerByIdQuery, Result<CustomerDto>> { public async Task<Result<CustomerDto>> Handle(GetCustomerByIdQuery request, CancellationToken cancellationToken) { var customer = await context.Customers .AsNoTracking() .FirstOrDefaultAsync(c => c.Id == request.Id, cancellationToken); if (customer is null) return Result.Failure<CustomerDto>(DomainErrors.Customer.NotFound(request.Id)); return customer.ToDto(); } } Todos os Handlers seguem este padrão: Primary Constructors + CancellationToken + AsNoTracking para leitura + Pattern Result. ``` |
| ## Restrições - ❌ NÃO altere arquivos de Migrations no EF Core (`/Infrastructure/Migrations/*`) - ❌ NÃO instale novos pacotes NuGet sem solicitação explícita - ❌ NÃO exponha Entidades de Domínio diretamente nos Endpoints (use DTOs/Results) - ✅ PODE modificar livremente Handlers, Endpoints e Mapeamentos dentro de `/Application` e `/API` |
## Processo de Revisão Antes de concluir qualquer tarefa: 1. Execute `dotnet build` e garanta zero avisos de compilação (Warnings as Errors). 2. Avalie a conformidade — declare explicitamente ✅ ou ❌ para cada item: - Uso de `CancellationToken` em métodos assíncronos - Injeção de dependência via *Primary Constructors* - Tratamento de exceções e uso de tipos `Result` - Testes unitários atualizados |
## Atualização de Entidades no EF Core ❌ Errado: Buscar entidade inteira apenas para atualizar um campo sem controle var user = await context.Users.FindAsync(id); user.Name = newName; await context.SaveChangesAsync(); ✅ Correto: Atualização via ExecuteUpdateAsync para operações pontuais de alta performance await context.Users .Where(u => u.Id == id) .ExecuteUpdateAsync(s => s.SetProperty(u => u.Name, newName), cancellationToken); |
minha-solucao/ ├── CLAUDE.md # Global: regras Git, estilo C#, convenções da Solution ├── src/ │ ├── Apps.Web/ │ │ └── .claude/CLAUDE.md # Específico para Blazor / Controllers / UI │ └── Services.Payment/ │ └── .claude/CLAUDE.md # Específico para gRPC, RabbitMQ e worker services |
| ## Manipulação de Datas - NUNCA use `DateTime.Now` ou `DateTime.UtcNow` diretamente - Use sempre `TimeProvider` injetado para facilitar testes unitários |
E estamos conversados
..
"Bendito o Deus e Pai de nosso Senhor Jesus Cristo, o
qual nos abençoou com todas as bênçãos espirituais nos lugares celestiais em
Cristo"
Efésios 1:3
Referências: