Pular para o conteúdo

Boas práticas e padrões · Princípios gerais · 5 min de leitura

DRY, KISS e YAGNI

Três atalhos de bom senso: não repita conhecimento, prefira o simples e não construa o que ninguém pediu ainda.

Ideia → YAGNI1YAGNI → KISS2KISS → DRY3DRY → Código4YAGNI → Backlog: nãoIdeia — "e se um dia…"Ideia"e se um dia…"YAGNI — precisa agora?YAGNIprecisa agora?KISS — cabe mais simples?KISScabe mais simples?DRY — regra já existe?DRYregra já existe?Código — menor e claroCódigomenor e claroBacklog — fica para depoisBacklogfica para depois

Arraste para o lado para ver o diagrama inteiro.

Cada ideia passa pelos três filtros em ordem; o que não é necessário agora volta para o backlog.

DRY — Don’t Repeat Yourself

Do livro The Pragmatic Programmer: "todo conhecimento deve ter uma representação única". O alvo é a regra de negócio duplicada (a alíquota do INSS em três lugares), não linhas parecidas por acaso. Juntar código que só se parece cria acoplamento errado — às vezes duplicar é melhor que a abstração errada.

KISS — Keep It Simple

A solução mais simples que resolve o problema hoje. As regras de design de Kent Beck dão a ordem: passa nos testes, revela a intenção, sem duplicação, com o menor número de elementos.

YAGNI — You Aren’t Gonna Need It

Da Extreme Programming: não implemente capacidade "para o futuro". Fowler lista os custos: construir, atrasar o que importa, carregar a complexidade e, frequentemente, errar a previsão.

No código: antes e depois

✗ AntesKotlin
// a mesma regra em três telas — e uma já ficou desatualizada
val descontoCarrinho = if (total > 200) total * 0.10 else 0.0
val descontoCheckout = if (total > 200) total * 0.10 else 0.0
val descontoEmail = if (total > 150) total * 0.10 else 0.0 // bug
✓ DepoisKotlin
object Promocao {
  private const val MINIMO = 200.0
  private const val TAXA = 0.10
  fun desconto(total: Double) = if (total > MINIMO) total * TAXA else 0.0
}
// carrinho, checkout e e-mail chamam Promocao.desconto(total)

A regra mora num lugar só: mudar o mínimo de 200 para 250 é uma linha, e o bug do e-mail não acontece.

Em resumo

Referências

Continue aprendendo

Todos os temas de boas práticas e padrões →