Executando verificação de segurança...
1
Carregando publicação patrocinada...
1

Boa pergunta, Leonardo!

Antes de listar: o SDD hoje roda em cima de um projeto .NET (Clean Architecture + CQRS + NHibernate + Vue.js 3), então os gates abaixo são específicos dessa stack. Mas o padrão é o mesmo para qualquer projeto: cada gate nasceu de um bug real ou de uma correção que tivemos que fazer manualmente mais de uma vez. Em um projeto React + Node, os gates seriam outros (validação de props, sanitização de input, patterns de hooks...), mas a mecânica é a mesma: codificar em regras automatizáveis o que hoje vive só na cabeça do dev sênior.

Dito isso, os 49 quality gates estão distribuídos em ~13 categorias:

Arquitetura & CQRS (8)

  • Entidade deve herdar Entity<T, long> com genéricos
  • Query handler → repositório de leitura, Command handler → repositório de escrita (NUNCA inverter)
  • Formulário unificado (Criar/Editar no mesmo form, nunca separados)
  • sealed class obrigatório em Commands, Handlers, Controllers, Validators
  • Value Objects obrigatórios para Email, CPF, CNPJ, CEP, Telefone (nunca string pura)
  • Propriedades virtual com protected set (requisito de proxy NHibernate)
  • Nomenclatura padronizada (ObtemPorChaveAsync, nunca FindByChaveAsync)
  • DI automático via Scrutor — nunca registrar repositório manualmente
  • Constantes centralizadas (5)
  • maxlength sempre via constante (LengthsConstraint.X), nunca hardcoded
  • [StringLength] idem
  • .Truncate() idem
  • Chaves de localização devem existir no arquivo central antes de usar
  • Nomes de coluna/tabela centralizados em helpers (snake_case)

Commands & Queries (8)

  • Command nunca recebe Value Object direto — sempre string, Handler converte
  • Strings em Command devem ter .Trim().Truncate()
  • Busca textual com .RemoveDiacritics() nos dois lados do Contains()
  • .FirstOrDefaultAsync(cancellationToken) obrigatório, nunca síncrono
  • CancellationToken sempre repassado, inclusive em métodos privados
  • Task.WhenAll proibido com NHibernate na mesma sessão (sequencializar)
  • Padrão A (server-side paging) como default em QueryHandlers
  • DataGridQuery nunca nullable no controller

Segurança (5)

  1. [ValidateAntiForgeryToken] proibido — CSRF via Double Submit Cookie
  2. Nunca expor ex.Message ao usuário — usar mensagem genérica localizada
  3. [SensibleAuditing] obrigatório em campos LGPD (CPF, CNPJ, Senha, Token)
  4. Nunca logar dados sensíveis sem sanitizar
  5. Html.Raw apenas com conteúdo sanitizado

Mapeamento NHibernate (4)

  • Ordem fixa no EntityMap: Id → References → Component → Map → HasMany → Table
  • Value Objects via Component(), nunca Map() direto
  • References() com Cascade.None() para entidades compartilhadas
  • Nunca mapear Chave, CriadoEm, AtualizadoEm (EntityMap já faz)

Controllers & Views (4)

  • [Authorize] desnecessário — FallbackPolicy global já protege
  • View usa , nunca outro componente
  • Helpers corretos por tipo de VO (EmailFor, CpfFor, etc.)
  • Select-multiple deve usar { id, text }, nunca { id, nome }

Testes (8)

  • dotnet build antes de dotnet test
  • Builder obrigatório para cada entidade
  • Construtor e Atualiza() devem ter mesmas validações nos testes
  • Warning testado via Errors["RESULT_WARNING"], nunca resultado.Message
  • Mock de localizer via indexer l[key], nunca GetString()
  • SoftDelete: mock com ObtemPorChaveAsync, nunca FindByAsync
  • 0 falhas para declarar pronto
  • Cobertura de 100% dos paths por handler

Registros obrigatórios (4)

  • JS registrado no arquivo central de estáticos
  • SessionStorage registrada no mixin global do Vue
  • Módulo e funcionalidades no DatabaseSeeder.cs
  • Chaves de idioma no Resources.resx

Checklist "Não declare pronto" (3)

  • Validação final automática: verifica VOs, cascades, flags, imports, helpers, views, registros
  • Nenhum erro de compilação
  • Nenhum teste falhando

Na prática a contagem cresce conforme adicionamos rules por camada (hoje são 13 arquivos de regras path-scoped que ativam automaticamente ao editar arquivos de cada camada). Os 49 do artigo são os cross-cutting — os que pegam os erros mais frequentes.

O ponto principal: nenhum desses gates foi inventado preventivamente. Todos nasceram de dor real — bugs em produção, code reviews repetitivos, ou correções que fazíamos manualmente toda vez. O SDD só formaliza isso em regras que a IA executa automaticamente.