Архитектура обработки исключений
Есть ли у кого-нибудь лучшие методы обработки исключений?
При поиске в Интернете я нахожу много лучших практик на уровне кода (не перехватывайте общие исключения, не ревертируйте новые исключения и т.д.) То, что я ищу, - это лучшие практики на более высоком уровне, например
- в пределах исключений catch catch на уровне ui.
- записывать как можно больше деталей, показывать дружественные сообщения об ошибках
- в более SOA-приложениях различаются функциональные исключения (вы запрашиваете конкретного клиента и ожидаете найти его, но не найдете его) и технических исключений (база данных в автономном режиме)
- не использовать исключения для функциональных исключений
- различать фатальные и нефатальные исключения
- различать исключения, которые делают повторную попытку или делают попытку полностью бесполезной
- шаблоны для оповещения обслуживающего персонала
Любые мысли и помощь приветствуются, спасибо.
Ответы
Ответ 1
@Ilya:
Это, вероятно, одна из худших статей, которые когда-либо писал Джоэл (для тех, кто не читал ссылку, он утверждает, что "Исключения считаются вредными", поэтому не используйте их).
Joel имеет две проблемы с исключениями:
Ned Batchelder имеет отличный (и гораздо более длинный) ответ на Joel здесь. У Джоэля есть короткий ответ здесь, на который Ned снова отвечает здесь.
Брэд Абрамс также имеет очень хорошую статью о значении исключений здесь.
Ответ 2
.NET Конкретный, но определенно имеет некоторую полезную информацию.
http://www.codeproject.com/KB/architecture/exceptionbestpractices.aspx
Ответ 3
Мне также нравится различать:
- исключение из-за вызывающей функции
- исключение из-за внутренней ошибки внутри функции.
Это для меня четкий способ разделить:
- динамическое исключение (это может произойти, но не обязательно, чтобы была выведена ошибка, liek - незаконный аргумент)
- статическое исключение (которое должно быть явно рассмотрено из-за дефекта от внутренних компонентов приложения)
Ответ 4
Вы можете сделать намного хуже, чем просмотреть код и документацию для Microsoft Блок приложений управления исключениями. Это, вероятно, слишком много для многих сценариев, но это, безусловно, всеобъемлющее.