Readme

C#

As convenções do guia aplicadas ao C# e ao .NET. A linguagem oferece um recurso para quase toda decisão de design, e a maior parte destas páginas trata de escolher entre eles: quando record e quando class, quando Result e quando exceção, quando var e quando o tipo escrito por extenso. Os exemplos usam C# 14 e .NET 10, e o texto avisa quando uma versão anterior se comporta de outro jeito.

Referência rápida: nomenclatura, modificadores, tipos, LINQ, controle de fluxo

Setup

Configuração inicial de um projeto C#/.NET: estrutura, infraestrutura e segurança.

TópicoConceitos
Fundação do projetoProgram.cs enxuto, extension methods, rate limiting, pipeline
SegurançaSecrets, env vars, user-secrets, cadeia de configuração
Fatia verticalIModule, descoberta automática, AddDefaults/UseDefaults, os seis passos, CQS
Entity FrameworkAsNoTracking, projeção, N+1, paginação, OrderBy, left join
DapperProcedures por domínio, queries simples, injeção de conexão

Fundamentos

TópicoConceitos
Variáveisvar, const, readonly, record para dados fixos
NomesPascalCase, _camelCase, prefixo I, sufixo Async
MétodosUm nível de abstração, orquestrador, construtor primário
Controle de fluxoGuard clauses, pattern matching, switch expressions
Densidade visualFases do método, o respiro antes do return, declaração + guarda

Avançados

TópicoConceitos
Tratamento de errosResult<T>, ApiError, exceção só para o inesperado
Assincroniaasync/await, Task.WhenAll, CancellationToken
LINQColeções, Select e foreach, materialização, left join
Injeção de dependênciasInjeção por construtor, tempo de vida, interface para teste
Design de APIMinimal API, fatia vertical, controllers, DTOs, status codes
TestesAAA, assert com valores nomeados, isolamento
DesempenhoSpan<T>, StringBuilder, ValueTask
ObservabilidadeLogging estruturado, níveis, PII, id de correlação
ValidaçãoLimpeza, FluentValidation, regras de negócio, filtro de saída
DatasDateTimeOffset, DateOnly, UTC, ida e volta ao banco
Modelagem de entidadesrecord struct para IDs, IReadOnlyList, Entity<TId>, factory + private setters
Referência rápidaNomenclatura, verbos, nomes proibidos, convenções rápidas

Frameworks

TópicoConceitos
BlazorRender modes, componentes, estado, formulários, roteamento, JS Interop
Razor Pages e MVCPageModel, Tag Helpers, controller thin, ViewModel, layouts, partial views

Princípios

Forma: estrutura e narrativa do método

PrincípioDescrição
Escrita em inglêsCódigo universal, nomes curtos e sem ambiguidade
PascalCase e _camelCasePúblico PascalCase, privado _camelCase
Sufixo AsyncTodo método assíncrono termina em Async
Nomes expressivosVariáveis e métodos que dispensam explicação
Código como documentaçãoNomes substituem comentários: comentários mentem
Orquestrador no topoChamada visível antes dos detalhes: top-down
SLAUma responsabilidade, um nível de abstração
Sem lógica no retornoSaída de uma linha: o retorno nomeia o resultado, não o computa

Legibilidade: fluxo, densidade visual e nomes

PrincípioDescrição
Retorno antecipadoSaída cedo na falha, sem else após return
Fluxo linearAninhamento em cascata substituído por fluxo plano
Pattern matchingswitch expressions sobre if-else encadeado
Valor fixo por padrãoreadonly, const, record: alteração é exceção explícita
Sem valores mágicosConstantes nomeadas em vez de literais inline
CQSRetornar novo estado, sem efeitos colaterais ocultos

Controle de qualidade: estado, erros, async e testes

PrincípioDescrição
Primary constructorsDI por construtor primário, sem service locator
Result<T>Exceção para falhas inesperadas; Result para fluxo de negócio
Falhar rápidoValidar cedo, interromper fluxo inválido
Contratos consistentesErros tipados, sempre o mesmo formato
I/O assíncronoasync/await: nunca .Result ou .Wait()
CancellationTokenPropagado em todas as chamadas de I/O públicas
Concorrência explícitaTask.WhenAll para chamadas independentes em paralelo
LINQ puroQuery transforma dados; efeitos colaterais ficam no foreach
Testes estruturadosAAA: fases explícitas; assert limpo, sem expressões inline

DoDocs v3.7.0 · Desenvolvido por @thiagocajadev · Baseado no trabalho de pmndrs/docs · Poimandres.