6 de Janeiro de 2025
Quando Extrair Abstração e Quando Deixar Simples
Como decidir se vale criar uma camada nova ou se o código ainda fica melhor permanecendo mais direto.
Andrews Ribeiro
Founder & Engineer
3 min Intermediario Sistemas
O problema
Tem um momento bem comum no desenvolvimento:
você ve duas coisas parecidas e pensa:
“Já vou abstrair agora para não repetir.”
As vezes isso ajuda.
Muitas vezes, não.
Porque a abstração chega antes do entendimento.
E quando isso acontece, o time ganha:
- uma camada a mais
- nomes bonitos
- menos clareza
- mais custo para mudar
Modelo mental
Pense assim:
abstrair e comprimir um padrão que já ficou claro o suficiente para merecer uma forma própria
Se o padrão ainda não esta claro, a abstração não comprime entendimento.
Ela comprime dúvida.
E dúvida comprimida costuma voltar em forma de:
- prop opcional demais
- parametro estranho
- condição especial
- API interna confusa
Quebrando o problema
Veja se as partes mudam pelo mesmo motivo
Esse e o teste mais útil.
Se dois trechos parecem parecidos, mas devem evoluir por motivos diferentes, abstrair pode colar coisas que precisavam continuar separadas.
Compare custo de repetição com custo da camada nova
Um pouco de repetição local pode custar menos do que:
- criar helper
- nomear helper
- explicar helper
- ajustar helper quando o terceiro caso chegar
Nem toda duplicação merece uma arquitetura em volta.
Prefira simplicidade enquanto o padrão amadurece
Se você ainda esta descobrindo as variações, o código direto muitas vezes ensina mais do que a camada genérica.
Depois que o padrão estiver claro, abstrair fica bem mais fácil.
Abstração boa reduz pergunta
Uma camada boa faz o leitor perguntar menos.
Uma camada ruim faz o leitor perguntar:
- o que isso faz?
- quando não funciona?
- por que esse parametro existe?
Se a abstração aumentou o número de perguntas, ela piorou o código.
Exemplo simples
Imagine tres fluxos que enviam notificação.
Todos parecem ter este formato:
- montar mensagem
- chamar provedor
- registrar resultado
A vontade inicial e criar logo um sendNotification() super genérico.
Mas, olhando melhor:
- um fluxo e marketing
- outro e alerta de segurança
- outro e confirmação operacional
As regras de retry, auditoria e prioridade já sao diferentes.
Nesse momento, talvez o melhor seja deixar mais simples e explícito.
Quando ficar claro o que realmente e comum, ai sim faz sentido extrair a camada certa.
Erros comuns
- Abstrair cedo demais só para cumprir DRY.
- Tratar repetição pequena como pecado maior do que confusao estrutural.
- Juntar comportamentos que mudam por motivos diferentes.
- Criar API genérica demais com parametro, flag e exceção demais.
Como um senior pensa
Quem tem mais experiência costuma perguntar:
“Essa abstração esta nascendo porque o padrão amadureceu ou porque eu estou desconfortavel vendo repetição?”
Essa diferença importa muito.
Senioridade aqui não e fazer o código parecer mais sofisticado.
E saber quando ainda vale deixar simples.
O que o entrevistador quer ver
Em entrevista, esse tema mede julgamento de design.
O avaliador quer ver se você:
- diferencia repetição aceitavel de acoplamento perigoso
- evita abstração prematura
- pensa em custo de manutenção, não só em elegancia
- sabe defender simplicidade sem parecer improviso
Uma resposta forte costuma soar assim:
“Eu extraio abstração quando o padrão já esta claro e quando a nova camada reduz leitura e manutenção. Se ainda estou descobrindo as variações, prefiro deixar mais simples por um tempo.”
Abstração boa reduz custo. Abstração cedo demais só redistribui confusao.
Tem hora em que o jeito mais senior de escrever código e resistir a vontade de ser esperto cedo demais.
Resumo rápido
O que vale manter na cabeça
- Abstração só vale quando reduz custo de mudança e de leitura, não quando apenas esconde repetição.
- Repetição honesta pode ser mais barata do que uma camada genérica prematura.
- Se o padrão ainda não amadureceu, abstrair cedo demais costuma congelar uma ideia ruim.
- Código simples não e código inferior; muitas vezes e código com menos vaidade e mais clareza.
Checklist de pratica
Use isto ao responder
- Consigo explicar por que repetição pequena nem sempre pede abstração?
- Sei avaliar se dois trechos mudam realmente pelos mesmos motivos?
- Consigo identificar sinais de abstração prematura em código real?
- Sei responder em entrevista quando eu deixaria o código mais simples por mais tempo?
Você concluiu este artigo
Próximo passo
Reuso Sem Complicar Próximo passo →Compartilhar esta página
Copie o link manualmente no campo abaixo.