La chiave è ripulire il codice che è più probabile che funzioni di nuovo.
Lavorare con codice ben fattorizzato è più divertente e più probabile che produca il risultato desiderato . Questi sono entrambi importanti.
Tuttavia, il refactoring richiede tempo e tutte le modifiche portano il rischio di nuovi bug. Il codice di refactoring a cui non hai bisogno di lavorare è una cattiva idea.
Come sapere in quale codice devi lavorare? Le modifiche tendono ad accadere insieme , nelle aree ad alto tasso di abbandono, mentre altre aree vengono lasciate inattive per un lungo periodo di tempo. Ci sono molte ragioni per questo fenomeno; uno è che le modifiche che apporti al momento sono probabilmente sbagliate, ma non puoi saperlo finché non sono terminate.
Quindi, utilizzo la seguente sequenza quando lavoro su una funzionalità o correzione di un bug:
-
Immagina come sarebbe il codice se fosse ideale per la modifica che voglio apportare, in modo che la modifica sia una semplice riga modifica che era ovviamente corretta?
-
Immagina un percorso dei refactoring per ottenere le cose fino a quel punto.
-
Esegui un refactoring alla volta , esegui il test mentre procedo e esegui il check-in di ogni refactoring separatamente, con una descrizione di modifica speciale che inizia con "REFACTORING:". Questo aiuta a rendere ovvio che se stai cercando un cambiamento deliberato del comportamento, non devi guardare a questo. Inoltre, poiché la maggior parte dei refactoring è ben definita con nomi noti, è facile capire queste modifiche in seguito.
-
Apporta la modifica di una riga per ottenere la modifica della funzionalità desiderata.
Questo approccio funziona altrettanto bene per le modifiche alle funzionalità esistenti così come per l'aggiunta di nuove funzionalità, dato che tutto è codice esistente dopo il giorno 1. Tuttavia, se ti stai indirizzando verso una nuova area di funzionalità per il tuo programma, può avere senso lanciare un'implementazione rapida e sporca insieme per ottenere un feedback reale sui tuoi piani.
Ci sono molti :
-
Se una scadenza si avvicina, i rischi dei refactoring possono superare i benefici. È richiesto il giudizio.
-
A volte il codice richiederebbe un ampio refactoring per fare in modo che questo funzioni, ma sarebbe possibile implementare la funzione o la correzione dei bug desiderati abbastanza facilmente. In questo caso, potrei fare i più chiari, chiari refactoring ma non l'ideale descritto sopra.
-
Se non ho test automatici di alta qualità , i rischi del refactoring sono più preoccupanti. Potrei rifattorizzare di meno, a seconda delle circostanze. Tuttavia, il codice scarsamente fattorizzato è anche difficile da testare, quindi è facile finire in un pantano se non stai attento.
Nota che evito il refactoring nei confronti della struttura che ritengo possa essere utile per alcune modifiche future che non posso essere sicuro di aver bisogno. Refactor per il problema a portata di mano. Tuttavia, se questa non è la prima volta che ho bisogno di fare questo tipo di cambiamento, potrei ampliare l'ambito del refactoring in previsione di futuri cambiamenti simili. È necessaria la sentenza, ancora.