cada intervenção, a entropia do sistema cresce de maneira exponencialmente proporcional à atual entropia do sistema. ▸ Por potencial: A entropia do sistema cresce à medida em que a diferença entre a ordem interna e a ordem externa crescem.
atividade suporte no desenvolvimento; ▸ Precisa ser dosada e aplicada com efetividade; ▸ Analise o código e se pergunte: Se eu tivesse um minuto para refatorar, onde eu o utilizaria?
Obsession ▸ Long Parameter List ▸ DataClumps ▸ Switch Statements ▸ Temporary Field ▸ Refused Bequest ▸ Alternative Classes with Different Interfaces ▸ Divergent Change ▸ Shotgun Surgery ▸ Parallel Inheritance Hierarchies ▸ Lazy class ▸ Data class ▸ Duplicate Code ▸ Dead Code, ▸ Speculative Generality ▸ Feature Envy ▸ Inappropriate Intimacy ▸ Message Chains ▸ Middle Man CODE SMELLS http://mikamantyla.eu/BadCodeSmellsTaxonomy.html THE BLOATERS THE OO ABUSERS THE CHANGE PREVENTERS THE DISPENSABLES THE COUPLERS
▸ Introdução de parâmetros ▸ Decomposição de condicional POSSÍVEIS SOLUÇÕES ▸ Fere o princípio de separação das responsabilidades ▸ Diminui o reaproveitamento e a manutenibilidade
Extração de Classes ▸ Extração de Subclasses POSSÍVEIS SOLUÇÕES ▸ São difíceis de entender ▸ Se muito utilizado, o método tende a receber muitos parâmetros vazios ▸ Verificações e variáveis desnecessárias dificultam o entendimento
final price def calculate(price, percent_modifier) if percent_modifier.nil? || percent_modifier < 10 price else price * (percent_modifier / 100) end end it 'calculate the final price with a modifier of 10%' do expect(calculate(100, 10)).to eq(110) end
the final price def calculate(price, percent_modifier) if percent_modifier.nil? || percent_modifier < 10 price else price * (percent_modifier / 100) end end it 'calculate the final price with a modifier of 10%' do expect(calculate(100, 10)).to eq(110) end
os testes chamando o novo método. • Rode os testes it 'calculate the final price with a modifier of 10%' do expect(final_price(100, 10)).to eq(110) end
os testes chamando o novo método. • Rode os testes it 'calculate the final price with a modifier of 10%' do expect(final_price(100, 10)).to eq(110) end
o nome do método e apagamos o antigo. # method to calculate the final price def final_price(price, percent_modifier) if percent_modifier.nil? || percent_modifier < 10 price else price * (percent_modifier / 100) end end
o nome do método e apagamos o antigo: • Rode os testes # method to calculate the final price def final_price(price, percent_modifier) if percent_modifier.nil? || percent_modifier < 10 price else price * (percent_modifier / 100) end end
o nome do método e apagamos o antigo: • Rode os testes # method to calculate the final price def final_price(price, percent_modifier) if percent_modifier.nil? || percent_modifier < 10 price else price * (percent_modifier / 100) end end
o nome do método e apagamos o antigo: • Rode os testes def final_price(price, percent_modifier) if percent_modifier.nil? || percent_modifier < 10 price else price * (percent_modifier / 100) end end
não sei qual o impacto que a refatoração tem sobre o funcionamento do sistema. ▸ Impacto Indesejável: Quando percebo que a refatoração tem impacto em algo que eu não quero ou posso mudar.
para manter e recuperar a qualidade da nossa aplicação, potencializando a evolução do software. ‣E deve ser parte constante do processo de desenvolvimento, pois permite à equipe continuar o trabalho de evolução com os recursos necessários.