Я пытаюсь решить, как обрабатывать исключения в моем приложении.
Многое, если мои проблемы с исключениями исходят из 1) доступа к данным через удаленную службу или 2) десериализации объекта JSON. К сожалению, я не могу гарантировать успех для любой из этих задач (вырезать сетевое соединение, искаженный объект JSON, который не входит в мой контроль).
В результате, если я столкнулся с исключением, я просто поймаю его внутри функции и верну ЛОЖЬ к вызывающему. Моя логика заключается в том, что все вызывающие действительно заботятся о том, была ли задача успешной, а не почему она не была успешной.
Вот пример кода (в JAVA) типичного метода)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Я думаю, что этот подход прекрасен, но мне очень любопытно узнать, что лучше всего подходит для управления исключениями (должен ли я действительно вызывать исключение на весь стек вызовов?).
В заключение ключевых вопросов:
- Можно ли просто перехватывать исключения, но не пузыривать их или формально уведомлять систему (либо через журнал, либо уведомление для пользователя)?
- Какие лучшие методы существуют для исключений, которые не приводят ко всему, что требует блок try/catch?
Follow Up/Edit
Спасибо за все отзывы, нашли отличные источники в управлении исключениями в Интернете:
- Рекомендации по обработке исключений | O'Reilly Media
- Исключительная обработка лучших практик в .NET
- Лучшие практики: управление исключениями (статья теперь указывает на копию archive.org)
- Антипаттеры с обработкой исключений
Кажется, что управление исключениями - это одна из тех вещей, которые различаются в зависимости от контекста. Но самое главное, нужно быть последовательным в том, как они управляют исключениями внутри системы.
Кроме того, следите за кодовым гнили через чрезмерные попытки/уловы или не давая исключение его уважение (исключение предупреждает систему, что еще нужно предупредить?).
Кроме того, это замечательный выбор из m3rLinEz.
Я склонен согласиться с Андерсом Хейлсбергом, и вы, что большинство звонящих если операция успешна или нет.
Из этого комментария возникают некоторые вопросы, которые следует учитывать при рассмотрении исключений:
- В чем смысл броска этого исключения?
- Как имеет смысл справиться с этим?
- Действительно ли вызывающий абонент заботится об исключении или им просто нужно, чтобы вызов был успешным?
- Заставляет вызывающего пользователя управлять потенциальным исключением изящным?
- Вы относитесь с уважением к идомам языка?
- Вам действительно нужно вернуть флаг успеха, например boolean? Возвращение boolean (или int) больше зависит от C, чем Java (в Java вы просто обрабатываете исключение).
- Следуйте за конструкциями управления ошибками, связанными с языком:)!