Não crie o componente reutilizável ainda: espere o padrão se repetir
Aprofundamento CEVIU
Aprofundamento
O texto parte de um caso concreto: três fluxos de "item action" (aprovação, alteração e movimentação de itens) que tinham a mesma cara na interface, com lista, seleção, confirmação e resultado, mas comportamentos distintos. Aprovar é uma afirmação sobre o futuro, alterar acontece na hora, e mover depende de outro sistema que pode rejeitar o pedido. Ao unificar tudo num componente só, cada diferença virou uma flag. Mudar a confirmação passou a exigir acordo dos três responsáveis, de um revisor que conhecesse todos os modos e de testes para cada combinação de modo e variante.
A regra proposta é esperar o padrão aparecer três vezes pelo mesmo motivo de mudança. O teste do autor: se esse requisito mudar, quem eu consulto, e todas as cópias mudam juntas? Se a resposta varia por cópia, é coincidência, não duplicação. Formatador de data entra na extração, botões de envio de donos diferentes não. Devem ser compartilhados desde o início primitives estáveis (botões, text inputs, layout containers), design tokens, comportamento de acessibilidade (focus trapping em diálogos, navegação por teclado, labelling) e tudo guiado por padrão externo (datas, formatação de moeda, clientes de protocolo). O cheiro de abstração prematura aparece na lista de props: children, size, tone descrevem o que renderizar; mode, variant, isSpecial descrevem a situação. Para desfazer, faça inline do módulo em cada chamada, remova os ramos não usados e só depois extraia pedaços pequenos que mudam pelo mesmo motivo. O autor cita a regra de três atribuída a Don Roberts (no Refactoring, de Martin Fowler), Sandi Metz (The Wrong Abstraction) e a AHA programming de Kent C. Dodds.
Por que isso importa
Para quem mantém um design system ou uma base de componentes, a leitura é que a revisão de props vira um critério prático de code review. Se a API cresce em flags de contexto, o custo de coordenação entre times já está subindo, e o inline pode sair mais barato do que mais um modo.
Perguntas frequentes
O que é a regra de três para componentes?
Na primeira vez que o código se repete, você apenas copia. Na segunda, você incomoda-se mas copia de novo. Na terceira, refatora. O artigo acrescenta uma condição: as três ocorrências precisam mudar pelo mesmo motivo.
Como saber se uma abstração é prematura?
Leia a lista de props. Se ela descreve o que renderizar (children, size, tone), tende a estar saudável. Se descreve a situação (mode, variant, isSpecial), provavelmente você juntou fluxos parecidos que têm donos e motivos de mudança diferentes.
O que vale compartilhar desde o início?
Primitives estáveis como botões, inputs e containers de layout, design tokens, comportamento de acessibilidade e utilitários guiados por padrões externos, como datas, moeda e clientes de protocolo. São formas definidas fora da sua especulação sobre o futuro.
Como desfazer uma abstração errada?
Faça inline do módulo comum em cada fluxo e remova os ramos que cada um nunca usa. Depois, separe o código por fluxo e extraia só as peças pequenas que de fato mudam pelo mesmo motivo, como tabela ou formatadores de data.
Fontes
- stackoverflow.blogfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 06 de novembro de 2026
- Editoria
- CEVIU Web Dev
