У меня есть следующие Java-код, который фиалки в Checkstyle о том, что «цикломатическая Сложность 11 (максимально допустимый в 10)»цикломатическая Сложность 11 (максимально допустимый в 10) в Java коде
public boolean validate(final BindingResult bindingResult) {
boolean validate = true;
for (String channel : getConfiguredChannels()) {
switch (channel) {
case "SMS":
// do nothing
break;
case "Email":
// do nothing
break;
case "Facebook":
// do nothing
break;
case "Voice":
final SpelExpressionParser parser = new SpelExpressionParser();
if (parser
.parseExpression(
"!voiceMessageForm.audioForms.?[audioId == '' || audioId == null].isEmpty()")
.getValue(this, Boolean.class)) {
bindingResult.rejectValue("voiceMessageForm.audioForms",
"message.voice.provide.all.audios");
validate = false;
}
boolean voiceContentErrorSet = false;
boolean voiceDescriptionErrorSet = false;
for (AudioForm audioForm : (List<AudioForm>) parser
.parseExpression(
"voiceMessageForm.audioForms.?[description.length() > 8000]")
.getValue(this)) {
if (audioForm.getAddAudioBy().equals(
AudioForm.AddBy.TTS)
&& !voiceContentErrorSet) {
voiceContentErrorSet = true;
bindingResult.rejectValue(
"voiceMessageForm.audioForms",
"message.voice.content.exceed.limit");
} else {
if (!voiceDescriptionErrorSet) {
voiceDescriptionErrorSet = false;
bindingResult
.rejectValue(
"voiceMessageForm.audioForms",
"message.describe.voice.content.exceed.limit");
}
}
validate = false;
}
break;
default:
throw new IllegalStateException("Unsupported channel: "
+ channel);
}
}
return validate;
}
}
Пожалуйста предложите подходящий способ избежать этой проблемы с чеком.
Таким образом, ваша сложность для этого метода довольно высока. Хорошо, разделите свой метод на более мелкие методы. Как и вся итерация audioForm и проверка дополнительного метода, и просто работайте с результатами этого метода. Также рассмотрите проверку инструкции switch. Прямо сейчас у вас есть только действие для канала «Голос». Либо используйте if if else здесь, либо просто извлеките весь блок case для «Voice» другому методу. – Matthias
Получите работу с более высокой циклической степенью сложности? Язык в щеках, но формирующий большие и сложные постановки (как и вы) без каких-либо промежуточных переменных, затрудняет чтение или отладку кода. Включение всего этого в один метод кажется симптомом того же самого. Ваш код почти в порядке или неплохой. Но черт возьми, он должен быть лучше структурирован. –
Было бы вежливо просто * посмотреть * на ваш вопрос, когда вы его написали, и исправить форматирование и отступы. Вы ожидаете, что другие помогут вам бесплатно, так что меньше всего вы можете сделать это легко и безболезненно для них. Просто переформатируйте любой код, который вы вставляете в SO сначала, и убедитесь, что он имеет отступы с пробелами. (Или, если вы не заботитесь о тех, кто может ответить на вопрос, тогда вы можете заботиться о своем рейтинге репутации SO ... Плохо отформатированный код вряд ли получит upvotes.) – hyde