그런 중첩 된 if else 문을 처리하는 다른 방법이 있습니까? 나는 너무 많은 else 문이 나쁘다는 것을 도처에서 읽었습니다. 이러한 경우를 처리하는 올바른 방법입니까 아니면 리팩토링 할 필요가 있습니까?Java가 중첩되어 있다면? 다른 접근법?
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);
}
, 당신은'대체 할 수있는 경우 (A) {B} 다른 {C}''경우의 (a) {B와; return} c' –
많은 중첩을 볼 수는 없지만 많은 조건이 있습니다. 따라서 코드는 괜찮은 것처럼 보일 수 있지만 몇 가지 빈 줄과 주석을 추가하여 읽기 쉽도록 만들 수 있습니다. –
스위치 및 NEsted IF-THEN-ELSE 제어 흐름 블록은 기계 명령 수준에서 다르게 최적화됩니다. "스위치"로 변경하면 difference.Also 많이하지 않습니다를 들어, 흐름 제어는 사용자가 signficant 리팩토링을하지 않는 한 해당하므로, 어떠한 소용이되지 않습니다 전환 다른 항목을 기반으로합니다. – ha9u63ar