Dopo la provocazione di Luka non potevo esimermi da scrivere un post su questo argomento :-).
Quando ci troviamo di fronte a del codice da rifattorizzare sovente ci sono diversi refactoring che possiamo applicare e quindi dobbiamo fare una scelta sapendo che le varie alternative porteranno a soluzioni diverse, ognuna con vantaggi e svantaggi.
Da quale partire? Quale produrrà un miglioramento? Quale porterà complessità inutile?
Spero che tutti usiate uno strumento di controllo dei sorgenti in modo da provarne più di una e fare revert se la soluzione applicata non produce i risultati previsti; anzi ve lo consiglio come esercizio: fate un elenco di tutti i possibili refactoring che potreste applicare e valutate il risultato di ognuno di essi.
Ancora più importante: il refactoring deve avere un obiettivo che non sia il refactoring stesso. Ho visto, in alcuni posti dove ho lavorato, progetti chiamati refactoring! Una scusa degli sviluppatori per dire facciamo un po' cosa ci pare non rompeteci le scatole :-).
Voi paghereste un team di sviluppo per un mese il cui risultato è la stessa applicazione di prima rifattorizzata, magari con qualche bacarozzo latente in omaggio?
Ritorniamo sulla scelta del refactoring da applicare. Il refactoring deve semplificare l'aggiunta o la modifica di una feature.
Quindi come lista da azioni da compiere vedo:
- Identificare in quali punti della codebase dovrò intervenire per aggiungere o modificare una feature
- Valutare se il codice esistente lo permetta in maniera che ci sentiamo confidenti
- Se la risposta al punto precedente è no, elencare quali possibili refactoring si possono applicare
- Nel caso di dubbio su quale sarà il più efficace provare diverse alternative
- Una volta applicato il refactoring corretto, effettuare le modifiche del caso (ovviamente tutto sotto test mi raccomando)