Я використовую SonarLint для Eclipse з недавнього часу, і це мені дуже допомогло. Однак воно постало перед нами питання про цикломатичну складність.
SonarLint вважає прийнятним CC 10, і є деякі випадки, коли я перевищую це, приблизно 5 або 6 одиниць. Ці частини пов'язані з картографами, де значення спираються на різні змінні, наприклад:
- Поле A спирається на String sA;
- Поле B спирається на String sB;
- Поле C спирається на String sC;
- тощо ...
У мене немає іншого вибору, як розмістити if
для кожного поля. Це не мій вибір (на щастя), а вже існуюча і складна система, яку я не можу змінити сам.
Ядро мого питання полягає в тому, чому так важливо не мати занадто високий КК в одному методі ? Якщо ви переміщуєте деякі свої умови одним або декількома під-методами, щоб зменшити складність, це не знижує вартість вашої загальної функції, це просто перенесення проблеми в інше місце, я думаю?
(Вибачте за невеликі помилки, якщо такі є).
EDIT
Моє запитання не стосується глобальної цикломатичної складності, а лише складності єдиного методу та розбиття методу (у мене є орієнтовний час пояснення, що саме я маю на увазі, вибачте). Я запитую, чому дозволено розділити ваші умови на більш дрібні методи, якщо вони все ще належать до "супер методу", який просто виконає кожен під-метод, додавши таким чином складність алгоритму.
Однак, друге посилання ( про анти-візерунок ) дуже допомагає.