DRY (Don't Repeat Yourself)
"Não se repita". O princípio DRY estabelece que cada pedaço de conhecimento ou lógica deve ter uma representação única, inequívoca e autoritária dentro do sistema.
1. O que significa na prática?
Se você tem a mesma lógica de negócio, a mesma validação ou o mesmo cálculo matemático escrito em três lugares diferentes, você tem um problema. Quando essa regra mudar, você terá que lembrar de atualizar os três lugares, aumentando o risco de bugs e inconsistências.
❌ Exemplo: Duplicação de Lógica (Ruim)
// Screen A
const total = items.reduce((acc, curr) => acc + curr.price * 0.9, 0);
// Screen B
const discountPrice = price * 0.9;Se a regra de desconto mudar de 10% para 15%, você terá que procurar em todo o projeto por 0.9.
✅ Exemplo: Representação Única (Bom)
// src/application/utils/pricing.ts
export const applyGlobalDiscount = (price: number) => price * 0.9;
//src/application/utils/pricing.test.ts
// Testamos a lógica em um único lugar!2. DRY no React: Custom Hooks
O uso de Custom Hooks é a forma mais poderosa de aplicar DRY na camada de Tela e Feature.
✅ Exemplo: Reutilizando Lógica de UI
// src/features/common/hooks/useToggle.ts
export function useToggle(initialValue = false) {
const [value, setValue] = useState(initialValue);
const toggle = () => setValue(prev => !prev);
return [value, toggle] as const;
}
// Uso em múltiplos componentes
const [isModalOpen, toggleModal] = useToggle();
const [isDropdownOpen, toggleDropdown] = useToggle();3. O Cuidado: Abstração Prematura e WET
"Duplication is far cheaper than the wrong abstraction." (Sandi Metz)
Às vezes, levamos o DRY longe demais e unificamos coisas que não deveriam estar juntas. Isso cria o código "espaguete", onde uma mudança para a Tela A quebra a Tela B porque elas compartilham a mesma função "genérica" que na verdade faz coisas levemente diferentes.
Quando NÃO aplicar DRY?
- Coincidência: Os códigos são iguais hoje, mas pertencem a funcionalidades que evoluem de forma independente.
- Complexidade: A abstração necessária para unificar os dois códigos torna a leitura muito mais difícil do que ter as duas partes separadas.
- WET (Write Everything Twice): Uma alternativa ao DRY que sugere que você só deve abstrair algo após repetir pela terceira vez (Rule of Three).
Como aplicar no projeto
- Constantes: Nunca use "magic strings" ou números soltos. Use constantes centralizadas.
- Styles: Use o Design System e Tokens em vez de repetir valores de HEX ou Spacing.
- Business Rules: Regras de cálculo ou validação de documentos (CPF, etc) devem estar na pasta
rulesda camada de Feature.