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 CC di 10, e ci sono alcuni casi in cui sono al di là di esso, circa 5 o 6 unità. Tali parti sono correlate ai mappatori 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;
- eccetera ...
Non ho altra scelta che mettere un if
per ogni campo. Questa non è la mia scelta (per fortuna) ma un sistema già esistente e complesso che non posso cambiare da solo.
Il nocciolo della mia domanda è: perché è così importante non avere un CC troppo alto in un solo metodo ? Se spostate alcune delle vostre condizioni in uno o più sotto-metodi per ridurre la complessità, non riduce il costo della vostra funzione generale, ma sta spostando il problema altrove, immagino?
(Ci scusiamo per eventuali piccoli errori).
MODIFICARE
La mia domanda non si riferisce alla complessità ciclomatica globale, ma solo alla complessità del metodo singolo e alla suddivisione del metodo (ho un momento difficile spiegare cosa intendo esattamente, scusa). Mi chiedo perché sia possibile dividere le condizioni in metodi più piccoli se appartiene ancora a un "super metodo", che eseguirà semplicemente ogni sotto-metodo, aggiungendo così complessità all'algoritmo.
Il secondo link ( circa l'anti-pattern ) è di grande aiuto.