Рекомендации по управлению исключениями в Java или C# [закрыто]
Я застрял, решая, как обрабатывать исключения в моем приложении.
много, если мои проблемы с исключениями происходят из 1) доступ к данным через удаленную службу или 2) десериализация объекта JSON. К сожалению, я не могу гарантировать успех ни для одной из этих задач (вырезать сетевое соединение, искаженный объект JSON, который находится вне моего контроля).
в результате, если я столкнусь с исключением, я просто поймаю его в функции и верну FALSE вызывающему. Моя логика такова что все вызывающий действительно заботится о том, если задача была успешной, а не почему она не была успешной.
вот пример кода (в 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 копировать)- Антипаттерны Обработки Исключений
Кажется, что управление исключениями является одной из тех вещей, которые варьируются в зависимости от контекста. Но самое главное, нужно быть последовательным в том, как они управляют исключениями в системе.
дополнительно следите за кодом-rot через чрезмерные попытки / уловы или не давая исключения его уважение (исключение предупреждает систему, что еще нужно предупредить?).
кроме того, это довольно выбор комментарий от m3rLinEz.
Я склонен согласиться с Андерсом Хейлсбергом и вами, что большинство звонящих только
заботьтесь, если операция прошла успешно или нет.
из этого комментария он поднимает некоторые вопросы, чтобы думать о том, когда работа с исключениями:
- в чем смысл этого исключения бросается?
- как это имеет смысл, чтобы справиться с этим?
- действительно ли вызывающий абонент заботится об исключении или им просто важно, был ли вызов успешным?
- заставляет вызывающего абонента управлять потенциальным исключением изящно?
ты проявил уважение к idoms языка?
- вы действительно нужно вернуть флаг успеха, как логическое? Возвращение boolean (или int) - это скорее c-образ мышления, чем Java (в Java вы бы просто обработали исключение).
- следуйте за конструкциями управления ошибками, связанными с языком :)!
Comments