Estou usando o SonarLint for Eclipse desde recentemente, e isso me ajudou muito. No entanto, levantou-me uma questão sobre a complexidade ciclomática.
O SonarLint considera aceitável um CC de 10 e há alguns casos em que estou além dele, cerca de 5 ou 6 unidades. Essas partes estão relacionadas aos mapeadores em que os valores se baseiam em diferentes variáveis, por exemplo:
- O campo A se baseia na String sA;
- O campo B depende da string sB;
- O campo C conta com String sC;
- etc ...
Não tenho outra escolha que colocar um if
para cada campo. Felizmente, essa não é minha escolha, mas um sistema já existente e complexo que não posso mudar sozinho.
O núcleo da minha pergunta é: por que é tão importante não ter um CC muito alto em um único método ? Se você mover algumas de suas condições em um ou mais sub-métodos para reduzir a complexidade, isso não reduzirá o custo de sua função geral, está apenas movendo o problema para outro lugar, eu acho?
(Desculpe por pequenos erros, se houver).
EDITAR
Minha pergunta não se refere à complexidade ciclomática global, mas apenas à complexidade de um método e à divisão de métodos (eu tenho um tempo difícil para explicar o que exatamente quero dizer, desculpe). Eu estou perguntando por que é permitido dividir suas condições em métodos menores se ainda pertencer a um 'super método', que apenas executará todos os sub-métodos, adicionando complexidade ao algoritmo.
O segundo link, no entanto ( sobre o anti-padrão ) é de grande ajuda.