Complexidade Ciclomática

Não gosto de projetos com alta complexidade ciclomática. Procuro evitar.
Mas parece que em alguns casos precisamos de realizar certos malabarismos injustificáveis.
Por exemplo um switch pode ser substituído por um map e vários objetos de comando + uma chamada como no código abaixo:

command = (Command) map.get(key);
command.execute();

Mas, vocês acham razoável criar um comando para cada case???
Qual seria outra solução para diminuir a complexidade ciclomática? Vale a pena mesmo procurar reduzir esta métrica no caso de switchs?

Geralmente é uma boa idéia sim.

O pattern de comando tem outras vantagens. Certamente, o número de switchs sem o pattern tende a crescer, aumentando progressivamente a complexidade geral do sistema. Afinal, com uma modificação em um dos comandos, você terá que localizar e alterar o código em todos os pontos onde existir um switch.

Isso não só é propenso a erros como também trabalhoso.

No caso de usar um objeto de comando, basta olhar para a classe.
Por exemplo, se você adicionar um método complemente novo, o próprio compilador te informará quais são as classes de comando que precisam ser modificadas para suportar esse método.

Que tal Strategy e polimorfismo em geral?

Substituir um switch por um Command pode acabar criando um switch OO. OO, mas ainda um switch.

Realmente, o ideal é trocar o switch pelo padrão State/Strategy ou polimorfismo, como descrito na refatoração do Fowler:
http://www.refactoring.com/catalog/replaceConditionalWithPolymorphism.html

Se preocupe com a complexidade ciclomática de métodos com muitos condicionais e loops.

Switches devem ser lidados a parte, pq quase sempre é resultado de programação procedural demais.

Dou razão para vocês. Talvez porque eu não tenha contado a história toda.

Eu criei uma tabela fila, e coloquei uma trigger em várias tabelas dicionário. Quando uma dessas tabelas é alterada, eu insero um registro na tabela fila com o nome da tabela alterada. Um listener, carrega os itens da tabela fila e executa uma busca na tabela apropriada para cada um desses itens.

A ramificação do problema ocorre porque o comando sql é diferente para cada tabela.