Clean Code: Controvérsias do DRY code e o Monstro da Abstração errada

English Article

seguido por grande parte da comunidade de programação e consiste basicamente em fazer abstrações para evitar repetições, não se preocupe se ficou um pouco confuso, durante este post vamos detalhar essas definições DRY, "Don't repeat yourself" ou "Não se repita", é um princípio no desenvolvimento de software que vem sendo e conceitos.

Por que é tão usado?

Como você pode imaginar, a técnica é usada para nos impedir de copiar e colar partes do nosso código que são idênticos e, de fato, é um princípio extremamente forte, que pode melhorar a organização e unificar funções, tornando um bug mais fácil de encontrar e corrigir.

Mas são mil maravilhas? não existe nenhuma maneira de isso dar errado? Bem, quando os projetos são maiores a complexidade aumenta, e com isso, abusamos do princípio, usando-o em todos os lugares do nosso código, e é nas abstrações que a situação começa a se complicar.

Este post se inspira fortemente na conversa de Kent C. Dodds no post Programação AHA e por Dan Abramov em A base de código WET.

O que são abstrações?

Abstrações são basicamente funções ou componentes (se estiver usando React ou algo similar), com a intenção de automatizar um determinado processo. Um exemplo são bibliotecas como Ant Design, MaterialUI e outras, que fornecem componentes que podem receber certos props, e esses props são usados para "deixar do seu jeito". Vejamos um exemplo simples.


_6
function printNameAndAge(nome, idade) {
_6
console.log(`${name} tem ${age} anos.`)
_6
}
_6
_6
printNameAndAge('Maria', 26)
_6
// Maria tem 26 anos.

Uma abstração é algo que podemos reutilizar e, se necessário, adicionar mais complexidade, como a seguinte função, que se comporta de forma única em certas idades.


_12
function printNameAndAge(nome, idade) {
_12
if (idade < 18) {
_12
console.log(`${name} tem ${age} anos e não pode beber.`);
_12
} else if (idade >= 18 && idade <= 120) {
_12
console.log(`${name} tem ${age} anos e sabe dirigir.`);
_12
} senão {
_12
console.log(`${name} tem ${age} anos e pode se aposentar.`);
_12
}
_12
}
_12
_12
printNameAndAge("Jonas", 235);
_12
// Jonas tem 235 anos e pode se aposentar.

O monstro da abstração errada.

Se você já usou esse princípio em um projeto mais complexo, certamente ficou confuso quando ao parar para pensar como deve transformar um código semelhante em uma função que suporte todos os casos, e caso este projeto ficou um pouco mais longo e complicado, então provavelmente sua abstração ganhou mais complexidade.

Prefira a duplicação ao invés abstração errada.

Sandi Metz

O importante é saber quando se deve quebrar uma abstração, caso ela esteja ficando cada vez mais complexa e mais difícil de implementar features para suportar diversos casos, a solução é quebrá-la para evitar dor de cabeça, e assim, entramos em outro princípio da programação.

YAGNI

"You Ain't Gonna Need It" é outro princípio de desenvolvimento de software, e consiste em não fazer código complexo porque você não vai precisar.

As tecnologias mudam, os recursos devem ser adicionados constantemente, você não precisa se matar para colocar mil pacotes ou frameworks diferente, basta fazer o que você precisa. Por mais que esse princípio faça todos pensarem que você não deve se esforçar, a verdade é que você não precisa complicar muito as coisas!

Conclusão

Por mais que esses princípios possam parecer, eles não são regras, você é livre para testar o que é melhor para você e experimentar o que funciona, não tome o conteúdo deste post como um bom caminho a ser seguido, pois ninguém é dono da razão e eu estou muito longe para dizer o que é certo a ser seguido. Espero que este post tenha clareado sua mente, deixe-me saber o que você gostou e se foi útil!