Sto usando SonarLint per Eclipse da poco, e mi ha aiutato molto. Tuttavia, mi ha sollevato una domanda sulla complessità ciclomatica.
SonarLint considera accettabile un C.C di 10, e ci sono alcuni casi in cui sono oltre, circa 5 o 6 unità. Queste parti sono correlate ai mapper in cui i valori si basano su variabili diverse, ad esempio:
- Il campo A si basa su String sA;
- Il campo B si basa su String sB;
- Il campo C si basa su String sC;
- ecc.
Non ho altra scelta che mettere un if
per ogni campo. Questa non è la mia scelta (fortunatamente) ma un sistema già esistente e complesso che non posso cambiare da solo.
Il nocciolo della mia domanda è: perché è così importante non avere un C.C troppo alto in un unico metodo ? Se sposti alcune delle tue condizioni in uno o più sotto-metodi per ridurre la complessità, non riduce il costo della tua funzione generale, è solo spostando il problema altrove, immagino?
(Ci scusiamo per piccoli errori, se ce ne sono).
Modifica
La mia domanda non si riferisce alla complessità ciclomatica globale, ma solo alla complessità del metodo singolo e alla suddivisione del metodo (ho un tempo approssimativo per spiegare cosa intendo esattamente, scusa). Sto chiedendo perché è possibile dividere le tue condizioni in metodi più piccoli se appartiene ancora a un "metodo super", che eseguirà solo ogni sottotema, aggiungendo così complessità all'algoritmo.
Il secondo link tuttavia ( sull'anti-pattern ) è di grande aiuto.