Se disponi di un metodo di grandi dimensioni, la semplice suddivisione del metodo in unità più piccole potrebbe non apportare alcun ulteriore vantaggio se non la modifica delle metriche.
La complessità può essere risolta con:
A volte il refactoring è appropriato. Abbiamo un metodo complesso che fa cinque cose, ha senso rifattorizzare in 1 metodo principale che chiama 5 metodi secondari. Questo dovrebbe rendere il codice più facile da capire e testare. Potremmo essere in grado di eliminare alcune righe di codice, ma alla fine probabilmente abbiamo la stessa quantità di linee di codice con cui abbiamo iniziato. Questi tipi di sforzi sembrano buoni a prima vista e possono produrre parametri migliori rispetto alla base di codice, ma nel complesso il valore aggiunto potrebbe essere inferiore al previsto. Devi determinare se l'analisi è appropriata. Ovviamente abbattere un grande metodo in 10 o 100 di chiamate sub o nidificate può introdurre un effetto cobra in cui le buone intenzioni hanno peggiorato le cose. Vuoi evitarlo.
A volte abbiamo un metodo troppo complesso per un semplice refactoring vecchio o scomposizione in blocchi più piccoli. In tal caso, potremmo aver bisogno di una riprogettazione. Una riprogettazione può introdurre nuovi modelli di progettazione e / o nuove classi che semplificano il codice. Quindi, invece di 1000 righe di codice, il risultato finale della riprogettazione è di 200 righe di codice. Questi sono sforzi molto più difficili, ma forniscono più valore da un punto di vista metrico e da un punto di vista generale del codice. Meno codice, meno complesso.
I compromessi sono sempre tempo e fatica. A volte il budget può consentire solo un piccolo refactoring come nel primo esempio. Altre volte una revisione complessa come nel caso 2.
Gli sviluppatori dovrebbero sempre monitorare lo stato di salute della base di codice controllando se stessi, fornendo revisioni tra pari e revisioni ufficiali del codice man mano che il codice viene aggiunto alla soluzione. Ciò manterrà la complessità a un livello gestibile.