← Назад к вопросам
Можно ли использовать Exception, как часть бизнес логики?
1.8 Middle🔥 161 комментариев
#Docker, Kubernetes и DevOps#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Можно ли использовать Exception как часть бизнес логики?
Краткий ответ
Нет, это плохая практика. Исключения предназначены для обработки исключительных ситуаций (ошибок), а не для управления нормальным потоком выполнения программы. Однако есть нюансы в зависимости от контекста.
Почему это плохая идея
1. Исключения дорогие
Выброс исключения создаёт stack trace, что требует значительных ресурсов:
// ПЛОХО: Исключения для нормального потока
public double divide(int a, int b) {
try {
return a / b;
} catch (ArithmeticException e) {
return 0;
}
}
// ХОРОШО: Проверка перед выполнением
public double divide(int a, int b) {
if (b == 0) {
return 0;
}
return (double) a / b;
}
Твет creation исключения может стоить 10-100+ микросекунд.
2. Снижает читаемость кода
Исключения усложняют логику и затрудняют понимание нормального потока выполнения.
3. Усложняет тестирование
Тесты с проверкой исключений громоздче чем проверка возвращаемых значений.
Правильный подход для бизнес-логики
1. Используй Result/Optional паттерны
public class PaymentResult {
private final boolean success;
private final String errorMessage;
public static PaymentResult success() {
return new PaymentResult(true, null);
}
public static PaymentResult failure(String error) {
return new PaymentResult(false, error);
}
}
2. Используй Optional для null-checks
return list.stream().findFirst();
3. Возвращай явные результаты
PaymentResult result = processPayment(user, amount);
if (result.isSuccess()) {
// Обработать успех
} else {
log.warn("Ошибка платежа: " + result.getErrorMessage());
}
Когда МОЖНО использовать исключения
Исключения нужны для обработки истинных ошибок:
public User findUserById(UUID id) throws UserNotFoundException {
return userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException(
"Пользователь не найден"
));
}
Вывод
Используй исключения для ошибок, а не для управления потоком. Это сделает код быстрее, понятнее и проще тестировать.