Вопрос проверяет понимание принципов обработки ошибок и проектирования исключений, что необходимо для создания надежного и поддерживаемого кода.
Исключения — это механизм для обработки ошибок и нестандартных ситуаций в программе. Использование встроенных общих исключений, таких как Exception или RuntimeException, часто бывает недостаточно, потому что они не передают смысл конкретной ошибки.
UserNotFoundException vs InsufficientFundsException).Exception, который может скрыть непредвиденные ошибки.Рассмотрим простой банковский сервис. Вместо того чтобы везде кидать RuntimeException с текстовым сообщением, мы создаем конкретные классы.
// Специализированные классы исключений
class InsufficientFundsException extends RuntimeException {
public InsufficientFundsException(String message) {
super(message);
}
}
class AccountNotFoundException extends RuntimeException {
public AccountNotFoundException(String accountId) {
super("Account not found: " + accountId);
}
}
// Использование в сервисе
public void transferMoney(String fromId, String toId, BigDecimal amount) {
Account from = accountRepository.findById(fromId);
if (from == null) {
throw new AccountNotFoundException(fromId); // Четкий тип ошибки
}
if (from.getBalance().compareTo(amount) < 0) {
throw new InsufficientFundsException("Insufficient funds in account: " + fromId);
}
// ... логика перевода
}
// Обработка на верхнем уровне
public void processTransfer() {
try {
transferMoney("acc123", "acc456", new BigDecimal("1000"));
} catch (AccountNotFoundException e) {
// Показать пользователю сообщение "Счет не найден"
logger.warn("User error: " + e.getMessage());
} catch (InsufficientFundsException e) {
// Предложить пополнить счет
logger.warn("Business rule violation: " + e.getMessage());
} catch (Exception e) {
// Непредвиденная ошибка (например, проблема с БД)
logger.error("Unexpected error", e);
throw e;
}
}Этот подход применяется практически во всех современных языках (Java, C#, Python, TypeScript) для структурирования ошибок в приложениях любого масштаба, особенно в бизнес-логике серверной части.
Вывод: Специализированные классы исключений стоит применять для четкого разделения типов ошибок в вашем домене, что значительно упрощает обработку, логирование и поддержку кода.
Уровень
Рейтинг:
3
Сложность:
4
Навыки
JavaScript
Java
Ключевые слова
Подпишись на Python Developer в телеграм