Я работаю над классом, который отправляет RequestDTO на веб-службу. Мне нужно проверить запрос до его отправки.Как уменьшить цикломатическую сложность?
Запрос может быть отправлен из 3-х разных мест, и для каждого «requesttype» существуют различные правила валидации. request1 должен иметь имя и номер телефона, request2 должен иметь адрес и т. д.)
У меня есть DTO, который содержит длинный список полей (имя, адрес, город, номер телефона и т. д.), и это тот же самый DTO отправленный независимо от того, какой тип запроса он есть.
Я создал 3 различных метода проверки и на основе типа, вызываемого соответствующим методом.
В каждом из этих методов у меня есть длинный список if-else для проверки полей, необходимых для каждого типа запроса.
private void validateRequest1(Request request) {
StringBuilder sb = new StringBuilder();
if (null == request) {
throw new IllegalArgumentException("Request is null");
}
if (isFieldEmpty(request.getName())) { *see below
sb.append("name,"));
}
if (isFieldEmpty(request.getStreet())) {
sb.append("street,"));
}
...
isFieldEmpty()
проверяет строку на нуль и isEmpty()
и возвращает логическое
Это дает мне цикломатическую сложности 28 в одном из этих методов, так что мой вопрос .. можно ли уменьшить эту сложность? - если да, то как мне это сделать?
В конечном итоге мне нужно проверить много полей, и я не могу понять, как это может быть сделано без большого количества проверок:/
Моей идеей было бы: Использовать какой-то объект FieldChecker, который инкапсулирует проверку пустоты (или какой-либо другой) и действие, которое необходимо предпринять ('sb.append()') и т. Д., И перебирать список таких объектов. Это делает код более четким, поскольку вы должны явно определять выходы и входы этой проверки. – millimoose