Ich verwende SonarLint seit kurzem für Eclipse und es hat mir sehr geholfen. Es warf mir jedoch eine Frage zur zyklomatischen Komplexität auf.
SonarLint hält einen CC von 10 für akzeptabel, und es gibt einige Fälle, in denen ich darüber hinaus bin, etwa 5 oder 6 Einheiten. Diese Teile beziehen sich auf Mapper, bei denen die Werte auf verschiedenen Variablen beruhen, zum Beispiel:
- Feld A basiert auf String sA;
- Feld B basiert auf String sB;
- Feld C basiert auf String sC;
- usw ...
Ich habe keine andere Wahl, als if
für jedes Feld eine zu setzen. Dies ist (zum Glück) nicht meine Wahl, sondern ein bereits existierendes und komplexes System, das ich selbst nicht ändern kann.
Der Kern meiner Frage ist: Warum ist es so wichtig, in einer einzigen Methode keinen zu hohen CC zu haben ? Wenn Sie einige Ihrer Bedingungen in eine oder mehrere Untermethoden verschieben, um die Komplexität zu verringern, werden die Kosten Ihrer Gesamtfunktion nicht gesenkt, sondern das Problem wird nur an eine andere Stelle verschoben, denke ich?
(Entschuldigung für kleine Fehler, falls vorhanden).
BEARBEITEN
Meine Frage bezieht sich nicht auf die globale zyklomatische Komplexität, sondern nur auf die Komplexität einzelner Methoden und die Aufteilung von Methoden (es fällt mir schwer zu erklären, was genau ich meine, sorry). Ich frage mich, warum es zulässig ist, Ihre Bedingungen in kleinere Methoden aufzuteilen, wenn sie noch zu einer "Supermethode" gehören, die nur jede Untermethode ausführt und so den Algorithmus komplexer macht.
Der zweite Link ( über das Anti-Muster ) ist jedoch eine große Hilfe.