Pracuję nad klasą, która wysyła RequestDTO do usługi sieci Web. Muszę zweryfikować żądanie przed jego wysłaniem.Jak zmniejszyć złożoność cykliczności?
Żądanie może zostać wysłane z 3 różnych miejsc i istnieją różne reguły sprawdzania poprawności dla każdego "requesttype", np. request1 musi mieć nazwę i numer telefonu, request2 musi mieć adres, itp.)
Mam DTO, które zawiera długą listę pól (nazwa, adres, miasto, numer telefonu itp.) i jest to ten sam DTO wysłany bez względu na jakiego typu jest to żądanie.
Stworzyłem 3 różne metody sprawdzania poprawności i na podstawie typu wywoływanej odpowiedniej metody.
W każdej z tych metod mam długą listę if-else, aby sprawdzić pola, które są niezbędne dla każdego typu żądania.
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()
sprawdza ciąg dla nieważną i isEmpty()
i zwraca wartość logiczną
To daje mi cyclomatic złożoność 28 w jednej z tych metod, więc moje pytanie brzmi .. czy to możliwe, aby zmniejszyć tę złożoność? - jeśli tak, to w jaki sposób chciałbym to zrobić?
Ostatecznie muszę sprawdzić wiele dziedzin i nie widzę w jaki sposób można to zrobić bez partii kontrole:/
Mój pomysł byłby następujący: Użyj jakiegoś obiektu 'FieldChecker', który obejmuje pustkę (lub inną) i akcję, która ma zostać wykonana (' sb.append() ') itd. I zapętlaj listę takie obiekty. Dzięki temu kod staje się bardziej przejrzysty, ponieważ trzeba jednoznacznie zdefiniować wyniki i dane wejściowe tego sprawdzenia. – millimoose