Quick reference

Escopo: C#. Resumo das convenções; o raciocínio que sustenta cada uma está em conventions/.

Nomenclatura

EscopoConvençãoExemplo
Classe, record, structPascalCaseOrderService, ApiError
InterfaceIPascalCaseIOrderRepository
Método públicoPascalCase + verboFindOrderAsync, CalculateTotal
Propriedade públicaPascalCaseOrderId, IsActive
Campo privado_camelCase_repository, _notifier
Parâmetro / localcamelCaseorderId, cancellationToken
ConstantePascalCaseMaxRetries, DefaultTimeout
Enum membroPascalCaseOrderStatus.Approved
Método asyncsufixo AsyncSaveOrderAsync, FindUserAsync

Verbos por intenção

IntençãoPreferidosEvitar
Ler do storageFind, Get, Load, FetchRetrieve, Pull
PersistirSave, Create, Insert, PersistPut, Push
Calcular / derivarCalculate, Compute, Build, DeriveGet, Do
TransformarMap, Transform, Convert, FormatProcess, Parse
ValidarValidate, Check, Verify, AssertHandle, Test
Enviar / notificarSend, Dispatch, Notify, EmitFire, Trigger
RemoverDelete, Remove, Purge, ClearDestroy, Kill

Nomes proibidos

CategoriaEvitarUsar
Verbos vagosHandle, Do, Run, Execute, Perform sem sujeitoverbo do domínio: Process, Validate, Submit
Get para cálculoGetTotal de cálculoCalculate, Compute
Substantivos vaziosData, Info, Obj, Item, Thing, Resultnome do domínio
Abreviações em campo_svc, _mgr, _ctrl, _repo_service, _repository
Abreviações em paramreq, res, ctxrequest, response, context

Tipos e contratos

CenárioTipo preferido
DTO de entrada (request)record imutável
DTO de saída (response)record imutável
Value objectrecord struct
Falha de negócioResult<T> com ApiError
Falha inesperadaException (sobe para middleware)
Coleção de retornoIReadOnlyList<T>
Coleção de entradaIEnumerable<T>
Assíncrono com dadoTask<T>
Assíncrono sem dadoTask

Snippets essenciais

// Record imutável
public record OrderRequest(string ProductId, int Quantity);

// Primary constructor com DI
public class OrderService(IOrderRepository repository, INotifier notifier) { }

// Switch expression com pattern matching
var response = result switch
{
    { IsSuccess: true, Value: var order } => TypedResults.Ok(order),
    { Error.Code: "NOT_FOUND" } => TypedResults.NotFound(),
    _ => Results.Problem(),
};

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