Czy zagnieżdżone ify to zawsze zło?

Odpowiedz Nowy wątek
2019-05-14 03:34
0

Muszę zaimplementować kilka scenariuszy i nie wiem jaki sposób będzie poprawniejszym - zagnieżdżone ify czy interfejsy funkcyjne?

boolean doSomething(User user, Long jakiesId) { 
        Optional<User> foundedUser = userRepository.findByLogin(user.getLogin());
        if(foundedUser.isPresent()) {
            if(checkEmailsCompatibility(user)) {
                if(!isAlreadyAssigned(user, jakiesId)) {
                      ......
                }else {
                    throw new AlreadyAssignedException(jakiesId);
                }
            }else {
                throw new NotCompatibleEmailAddressesException(user.getLogin());
            }
        }else {
            ............
        }
        return true;
    }

Kod wydawał mi się czytelny do czasu kiedy nie musiałem dla każdego niespełnionego warunku dodać else throw new Exception... No i to if(foundedUser.isPresent()) bardzo śmierdzi.
Nie do końca wiem jaka jest poprawna praktyka rzucania wyjątków. Powinienem to robić już w metodach sprawdzających? W sensie jeśli mam ifWhatever() to dla niespełnionego warunku rzucać Exception czy dopiero poziom wyżej, jak w kodzie który wkleiłem?

Z tymi ifami to jak z tym dowcipem Pana Grabowskiego. dla zainteresowanych

Pozostało 580 znaków

2019-05-15 08:28
1

Jak widać jest dużo rozwiązań tego samego problemu :D Dodam że taką walidację można też machnąć dekoratorem:
new CheckEmailCompatibility(new AlreadyAssigned(user, id), user).result(). Aczkolwiek to chyba troszeczkę przerost formy nad treścią w tym przypadku :) Choć dodanie kolejnego warunku staje się dość proste

Chociaz za chwile stukna 2 lata expa to ciagle jakos dekoratora nie czaje xD. - Akihito 2019-05-15 09:37

Pozostało 580 znaków

2019-05-15 09:03
1
lubie_programowac napisał(a):

Zasadniczne pytanie w całej tej historii: po co te ify? Należy programować w taki sposób aby nie było możliwe wywołanie doSomething w kontekście gdy isAlreadyAssigned zwróci true.

Dawaj. Pokaż.
(to nie jest złośliwe - dobry pomysł)


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 1x, ostatnio: jarekr000000, 2019-05-15 09:03

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

2 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 1

Robot: Mediapartners-Google