Gibt es einen anderen Ansatz, um solche verschachtelten if else-Anweisungen zu behandeln? Ich habe überall gelesen, dass zu viele, wenn noch andere Aussagen schlecht sind. Ist dies der richtige Weg, um solche Fälle zu behandeln, oder muss es umgestaltet werden?Java verschachtelt, wenn sonst? Andere Ansätze?
User user = loginHistoryService.findByUsername(loginRequest.getUsername());
boolean isPasswordValid = bcryptPasswordEncoder.matches(loginRequest.getPassword(), user.getPassword());
if (user.isDeleted()) {
throw new AccountDeletedAuthException("Account is Deleted");
} else if (user.isLocked()) {
if (DateUtil
.addHours(user.getLockedTime(), Integer.parseInt(
messageSource.getMessage(Constants.UNLOCK_ACCOUNT_AFTER_XX_HOURS, null, "24", null)))
.compareTo(DateUtil.getCurrentDateTime()) < 0 && isPasswordValid) {
logger.info("|*|*| Unlocking account. Account Lock Timer Over.. |*|*|*|");
loginHistoryService.lockUserAccount(user.getUserId(), false);
} else {
throw new LockedException("Account is Locked");
}
} else if (user.getUserStatusId() == UserStatus.INACTIVE.getStatusCode()) {
throw new InactiveAccountAuthException("Account is Inactive");
} else if (user.getUserStatusId() == UserStatus.PENDING_VERIFICATION.getStatusCode()) {
throw new DisabledException("".trim() + user.getUserId());
} else if (!isPasswordValid) {
List<Integer> loginAttemptStatuses = loginHistoryService.getLastThreeLoginAttempts(user.getUserId());
loginHistoryService.createLoginHistoryEntry(user.getUserId(), LoginStatus.FAILURE.getStatusCode());
int consecutiveFailedAttempts = 0;
for (int tempIndex = 0; tempIndex < loginAttemptStatuses.size(); tempIndex++) {
if (loginAttemptStatuses.get(tempIndex).intValue() == LoginStatus.FAILURE.getStatusCode()) {
consecutiveFailedAttempts++;
} else {
break;
}
}
if (consecutiveFailedAttempts == 3) {
loginHistoryService.lockUserAccount(user.getUserId(), true);
}
throw new InvalidPasswordAuthException("".trim() + consecutiveFailedAttempts);
}
wenn nichts danach folgt, könnten Sie ersetzen ', wenn (a) {b} else {c}' mit ', wenn (a) {b; Rückkehr} c' –
Ich sehe nicht so viel Nesting, nur viele Bedingungen. Daher scheint der Code in Ordnung, aber Sie könnten ein paar leere Zeilen und Kommentare hinzufügen, um ihn lesbarer zu machen. –
Switch und NEsted IF-THEN-ELSE-Regelflussblöcke sind auf Maschinenbefehlsebene unterschiedlich optimiert. Der Wechsel zu "Switch" macht keinen großen Unterschied. Außerdem basiert Ihre Flusskontrolle auf verschiedenen Elementen, so dass ein Umschalten nicht sinnvoll ist, es sei denn, Sie nehmen eine wichtige Umgestaltung vor. – ha9u63ar