| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Философия обработки Exception-ов |
| Автор: ivashkanet 18.3.2008, 10:33 |
| Всем привет. Заметил, что совсем не умею обрабатывать эксепшены :( 1) В 90% случаев просто логирую и/или показываю юзеру // т.е. ничего толкогового с информацией об ошибке не делаю. 2) Любимый catch блок -- catch (Exception ex) // А как же обрабатывать только конкретную ошибку? 3) Больше в голову ничего не приходит, но есть четкое ощущение, что я с эксцепшенами не дружу :( Что можете посоветовать, уважаемые форумчане? Зарание спасибо, ivashkanet. P.S. Если кто считает, что но еще! не "уважаемый" форумчанин -- спешу его поправить, для меня важно мнение каждого! |
| Автор: ivashkanet 18.3.2008, 12:11 | ||
tol05, эхххььь, это теория. Я это все знаю :( Мне бы применять научиться...
Это я делаю, но неужели это все? Не верю! Можно ведь проанализировать эксепшен и, если это возможно, вернуться в начало, возможно что-то исправить, и повторить попытку (Server unaccessible)... Эт тоже в курсе А вот за статьи реально спасибо! Добавлено через 10 минут и 39 секунд Прочитал первую. Очень неплохой экскурс в правила "хорошего тона". Большое спасибо. Вторая -- многа букафф, отметил к прочтению. |
| Автор: ivashkanet 18.3.2008, 12:26 |
| Пролистал вторую --- ИМХО, то что мне надо! Но почему же так много букаффф Перенес "к прочтению" на "к прочтению сегодня на ночь" |
| Автор: tol05 18.3.2008, 14:24 | ||
а что? мало?
Исправить и вернуться - нельзя, т.к. исключение выбрасывает тебя их стека выполнения (стек очищается, кто его второй раз заполнит?). Но можно на верхнем уровне перехватить exception, подправить ситуацию и снова зайти в эту же функцию (это я чисто теоретически рассуждаю, вряд ли кто будет применять такой подход). В конце-концов главная наша задача - избавиться от ошибок до релиза, так что в идеале exception-ы будут выбрасываться редко и в ситуациях, не зависящих от твоего кода (сиквел-сервер не ответил, сеть отвалилась, юзер неграмотный и т.п.) - т.е. вряд ли тебе удастся что-то исправить и вернуться в метод... |
| Автор: ivashkanet 18.3.2008, 15:01 |
Как-то да Да, я когда писал понял, что это почти невероятная ситуация (именно поэтом у меня так много "возможно" |
| Автор: ivashkanet 19.3.2008, 14:06 | ||||||||||||||
| Прочитал. То что надо Выжимки: Когда ловить исключения:
Требуемая информация по группам "пользователей":
Как получить требуемую информацию в коде:
Каждое приложение должно ловить исключение до того как оно попадет к конечному пользователю! Для этого используют: ASP .Net Cекцию customErrors файла web.config:
Дерективы конкретной страницы:
Код:
Самостоятельное приложение:
Так-то вот ;-) |
| Автор: QryStaL 10.6.2008, 12:50 |
| Вот еще интересная статья http://blogs.msdn.com/kcwalina/archive/2007/01/30/ExceptionHierarchies.aspx |
| Автор: source777 10.6.2008, 20:53 | ||
ivashkanet Вот тебе несколько философских аксиом для размышлений: 1) Исключения можно генерировать только в исключительных случаях, никогдане используй исключения для управления потоком выполнения. 2) Исключения должны перехватываться только в том месте, где они могут быть обработаны с уровнем знаний достаточным для того, чтобы справиться с исключением наилучшим образом, например, выполнить откат. 3) Надо стремиться писать нейтральный к исключениям код, под этим понимается что ты сначала выполняешь тот код, который потенциально может генерировать исключение, и только потом фиксируешь изменение состояния при помощи операций 100% не генерирующих исключения. |
| Автор: jonie 10.6.2008, 22:29 | ||
|
| Автор: source777 10.6.2008, 23:33 |
| Допустимо при использовании логирования или присоединения к исключению доп. информации. А перехватывать исключение лишь для того, чтобы пробросить его дальше - это дурно пахнет... |
| Автор: ivashkanet 11.6.2008, 11:11 |
| Во некроманты source777, за это время я столько литературы перелопатил... в том числе и про исключения. Тем более Exception Management Architecture Guide ответила на все мои вопросы. Первый пункт это очевидно, второй написан в статье и я даже перевел соответствующий кусок (см выше). В третьем вообще фигня какая-то написана. А если при фиксировании состояния объект выкидывает исключение (нарушение бизнес-правил)? И вообще это больше относиться к хорошему стилю программирования: разделение функциональности получающей данные от фиксирующей измения (грубо: читателей и писателей). |
| Автор: source777 11.6.2008, 14:13 | ||
| А я чё, я ничего... это QryStaL... да и прошло то меньше 3 месяцев... не 3 года всё-таки. Ошибаешься, там очень полезная методика описана.
Грамотно применяя эту технику, можно писать нейтральный к исключениям код с минимальном кол-вом блоков try/catch... и возможностью отката при возникновении исключения. |
| Автор: ivashkanet 11.6.2008, 14:26 | ||
Ну так переубеди меня
Опять ничего не понятно. Раз затронул эту тему развивай ее: давай ссылки, примеры, ... ;-) Добавлено через 1 минуту и 16 секунд QryStaL, спасибо за статью, но "Exception Management Architecture Guide" все же покруче будет. |
| Автор: QryStaL 11.6.2008, 14:33 | ||
Согласен. Эта статья просто в дополнение темы. |
| Автор: PashaPash 11.6.2008, 14:39 |
| Есть еще отличная вещь под названием http://msdn.microsoft.com/en-us/library/cc511522.aspx для применения этого гайда на практике. |
| Автор: source777 11.6.2008, 21:03 | ||
|
| Автор: neutrino 8.11.2010, 11:31 |
| В компиляторе является ли ошибка компиляции ексепшеном? В некоторых случаях можно продолжать компилировать, чтобы найти остальные ошибки. |
| Автор: KelTron 8.11.2010, 14:32 |
Думаю нет, т.к. это обыденное явление, а не исключительное.. |