Raciocínio para esperar até a terceira vez na Regra dos Três?

16

Acabei de encontrar o artigo " Regra dos Três " na wikipedia

A regra de três é uma regra prática de refatoração de código para decidir quando um trecho de código replicado deve ser substituído por um novo procedimento. Ele afirma que o código pode ser copiado uma vez, mas que quando o mesmo código é usado três vezes, deve ser extraído para um novo procedimento. A regra foi introduzida por Martin Fowler na refatoração e atribuída a Don Roberts.

Sei que isso é apenas uma regra de ouro, mas por que é recomendável refatorar somente após a segunda duplicação? Existe alguma desvantagem na refatoração quando escrevemos a primeira duplicação?

Louis Rhys
fonte
2
Ver Dois é um número impossível e regra Zero-Um-Infinito para outro conjunto de perspectivas.
AakashM
Ao falar sobre desenvolvimento de software, o Wiki original geralmente é uma fonte muito melhor que a Wikipedia. Afinal, Ward Cunningham inventou o Wiki como um meio de falar sobre desenvolvimento de software. Veja C2.Com/cgi/wiki?RuleOfThree
Jörg W Mittag
2
Se houver dois cenários para reutilização, você poderá ramificar a lógica facilmente (se houver). Quando chega a três caminhos possíveis, fica mais fácil re-fatorar do que replicar e manter.
Andrew Lewis
Eu acho que é uma desculpa conveniente para copiar e colar, quando alguém pode realmente refatorar e generalizar. Quando você obtiver o terceiro caso, poderá generalizar mais.
Alexey19 /

Respostas:

17

Eu acho que essa regra geral existe porque é fácil ser pego jogando "What if ..." ao projetar o código pela primeira vez ou após a primeira duplicação. Eu encontrei uma paralisia severa na análise em alguns casos porque as pessoas começaram a projetar funcionalidades que podem ser necessárias mais tarde. Mas não é necessário para o problema imediato em questão.

Existe uma arte para projetar / escrever apenas o que você precisa, mantendo o código passível de recálculo futuro.

EdH
fonte
8
Este é um bom ponto. Na minha experiência, ter uma terceira cópia também torna os pontos em comum e as diferenças entre eles um pouco mais nítidos do que com apenas dois.
Daniel B