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
DamianSnDamianSn