Há algum tempo venho pensando em escrever um pouco sobre o conceito DRY. Pensei tanto que o Jeremy Miller escreveu um post bastante esclarecedor sobre o assunto. Então vou falar um pouquinho do assunto e quem quiser mais a respeito pode ir ao blog dele.
DRY significa Don’t Repeat Yourself, em bom português, não se repita. Que conceitualmente significa não nunca escreva o mesmo trecho de código duas vezes, evite duplicação de código. Esta prática melhora a separação de responsabilidade de seu código e facilita enormemente a manutenção de código.
Dois exemplos práticos:
O ruim:
Eu estava consertando um bug simples e precisava executar um comando antes de mandar executar uma seção de um relatório. Achei a chamada da seção e coloquei meu trecho de código. Somente depois do checkin, fazendo alguns testes ad hoc é que descobri um cenário incomum no qual o bug continuava acontecendo. O problema é que no método haviam mais de uma chamada a seção, no meio de vários “ifs” aninhados. Um caso típico de códigos duplicados, sempre que acontece uma manutenção o desenvolvedor tem que “saber” que precisa mudar em dois lugares, senão acontecerá algum problema.
O bom:
Tive que fazer manutenção em uma série de testes automatizados hoje. Uma alteração no aplicativo iria “invalidar” todos os testes. Um campo que deveria ser testado teria seu valor alterado. Por “sorte” eu havia implementado um método com as regras de geração deste valor em uma classe base para todos os testes do módulo em questão. Bastou alterar esta regra em um método, fazer checkin e partir para o abraço, os 33 testes voltaram a funcionar.
Toda vez que você que tiver um dejavu e pensar: “acho que já escrevi ou vi algo assim em outro lugar do aplicativo” ou então: “ontem fiz um select nesta mesma tabela” dê uma revisada no seu código bricando de jogo da memória.
Alguns code smells e princípios relativos ao DRY:
Duplicated Code
Once And Only Once
Switch Statements Smell
Orthogonality and the DRY Principle