У меня есть метод, который принимает вход с именем id. Основываясь на идентификаторе возможностей, я выполняю бизнес-реализации, выдвинутые в виде случая коммутатора. У меня есть функциональность, но столкнулась с проблемой, когда отчет о сонаре демонстрирует высокую циклическую сложность около 12-14. Компания, в которой я работаю, использует стандарт 10 как максимальную цикломатическую сложность. Мои соображения состоят в том, что, если мне удастся сломать код на слишком много блоков, читаемость кода будет затронута.Каков наилучший способ обработки кода с помощью операторов if/switch с высокой циклической сложностью?
Примечание: - У меня нет разрешений для изменения правил сонара.
К сожалению, я не могу использовать этот код. Код будет следующим образом, хотя,
// Dependency Injected
private someService;
public void processCapability(..., String capabilityId) {
switch (capabilityId) {
case ORDER_DISPENSED_WITH_SOURCE1:
someService.doDispense1();
case ORDER_DISPENSED_WITH_SOURCE2:
someService.doDispense2();
case ORDER_REJECTED:
someService.doReject();
case ORDER_CANCEL:
someService.doCancel();
case ORDER_PURGE:
someService.doPurge();
...
default: throw exception
}
}
Update: Я был в состоянии решить мою проблему, с решением я писал в ответах ниже.
Если есть 12-14 случаев, то 12-14 случаев. Ничто не может с этим поделать, если вы не дублируете дела. Только решение, вероятно, состоит в том, чтобы перестроить ваш общий подход, но я не могу дать вам никаких советов по этому поводу, потому что вы не предоставили никакого кода. Однако правило вашей компании довольно странно. – Zarwan
@ Правила компании Zarwan всегда есть. получается, что управление не понимает код. – nhouser9
«Если мне случится сломать код на слишком много блоков, читаемость кода будет затронута». - обычно читаемость кода отрицательно сказывается, если вы * не разбиваете * на более мелкие блоки (аналогичные методы). Однако они должны иметь хорошее имя, которое описывает, что делает этот метод, и имеет четкую, единую функцию. –