Devo ammettere che amo il codice di refactoring, ma ho scelto saggiamente il refactoring e perché.
L'utente del tuo codice beneficerà chiaramente del codice riscritto? L'utente richiederà questo nuovo codice di stile funzionale, o è solo una cosa sviluppatore, per provare a programmare con uno stile diverso? Se non c'è alcun beneficio per l'utente, ad eccezione del fatto che il codice ora sembra "bello", chi ne avrà bisogno? Stai sostituendo una moda con un'altra. E questo è YAGNI - Non ne hai bisogno.
Se la base del codice è grande, significa anche che questo codice è già stato sviluppato negli anni, il che significa che la base del codice corrente è già piena di stili di codice diversi. E se stiamo parlando di una grande base di codice, mi sembra che potresti avere anche un sacco di codice PHP legacy. Dovresti essere consapevole del fatto che molto probabilmente il refactoring / riscrittura del codice introdurrà nuovi errori. Ogni utente odia nuovi errori quando il codice precedente funzionava.
Sei pronto a combattere l'introduzione di nuovi errori? Voglio dire, hai già dei test unitari per rilevare errori o regressioni? Se non hai test unitari, come ne sarai sicuro, che hai capito il codice che hai trasformato in un'espressione di stile funzionale? Scrivi test unitari! Se questo codice non è verificabile, rendilo testabile. Finché non ci sono test unitari per i frammenti che vuoi refactoring - non refactoring.
Il refactoring è molto meno soggetto a errori se il tuo IDE supporta il fattore. Anche allora i fattori non sono banali e spesso si tradurranno in nuovi comportamenti invisibili.
- Rifacimento del codice Java: eccellente supporto IDE (Eclipse, IntelliJ, Netbeans, ...)): basta eseguire il commit spesso (ogni secondo o due minuti), mentre si esegue il refactoring. La maggior parte dei refactoring sta premendo alcune combinazioni di tasti.
- Rifacimento del codice PHP: ho avuto un cattivo supporto IDE: questo significa un sacco di passaggi manuali, in cui ognuno potrebbe introdurre nuovi errori.
Apporto cambiamenti alle regole boy-scout, ogni volta che tocco un codice vicino, a volte estraggo un metodo, rinomina un metodo, introduco un parametro invece di usare un campo nella classe, cambio firma del metodo, rinomina un campo,. .. Ma non cerco mai di aggiustare qualcosa che mi viene in mente, cosa sembra solo sbagliato. Se è sbagliato, perché nessuno si è lamentato, e quando nessuno si è lamentato, cosa posso aver perso? Scrivi un test / test per codice errato.
Faccio refactoring, ad es. dalla GUI-codice della classe di Dio ai modelli, se e solo se, devo correggere un errore in questa classe e / o aggiungere una nuova funzionalità per quella classe. Questo di solito è per il codice che ho ereditato da altri sviluppatori.
Potresti forse usare il tempo che potresti spendere per il refactoring di questo codice meglio utilizzato per qualcosa di più vantaggioso per l'utente? Alcuni di questi benefici sono anche test unitari e integrazione continua.
Se ti piace questo stile funzionale usalo per il nuovo codice. Ma trovo l'esempio 2 non più leggibile del codice fornito nell'esempio 1.
hth