Я использую SonarLint для Eclipse с недавнего времени, и это мне очень помогло. Однако, это подняло мне вопрос о цикломатической сложности.
SonarLint считает приемлемым CC 10, и в некоторых случаях я превышаю его, около 5 или 6 единиц. Эти части относятся к картографам, где значения зависят от разных переменных, например:
- Поле A опирается на строку sA;
- Поле B опирается на строку sB;
- Поле C опирается на String sC;
- так далее ...
У меня нет другого выбора что положить if
для каждого поля. Это не мой выбор (к счастью), но уже существующая и сложная система, которую я не могу изменить самостоятельно.
Суть моего вопроса: почему так важно не иметь слишком высокий CC в одном методе ? Если вы перенесете некоторые из ваших условий одним или несколькими вспомогательными методами, чтобы уменьшить сложность, это не уменьшит стоимость вашей общей функции, а просто переместит проблему в другое место, я полагаю?
(Извините за мелкие ошибки, если есть).
РЕДАКТИРОВАТЬ
Мой вопрос касается не глобальной цикломатической сложности, а только сложности одного метода и разделения метода (у меня есть трудное время, чтобы объяснить, что именно я имею в виду, извините). Я спрашиваю, почему допустимо разделить ваши условия на более мелкие методы, если они все еще принадлежат «супер-методу», который будет просто выполнять каждый суб-метод, тем самым добавляя сложности алгоритму.
Однако вторая ссылка ( об анти-паттерне ) очень полезна.