У земли Java была та же проблема.Вы просто смотрите на метод и не можете на первый взгляд понять, что он делает, потому что все, что вы видите, это блоки try / catch.Возьмите метод из 30-40 строк и отбросьте все операторы try и catch, и вы можете получить 5-6 строк чистой логики приложения.Это не такая большая проблема с C #, поскольку в нем есть непроверенные исключения, но в коде Java это становится ужасно.Самое смешное, что блоки try / catch изначально были предназначены для решения той же проблемы.Тогда это было вызвано безумием errno / errstr.
То, что обычно делают ребята из Java, основано на том, как вы обычно обрабатываете исключение.Большую часть времени вы ничего не можете сделать, чтобы исправить проблему.Вы просто уведомляете пользователя, что все, что он пытался сделать, не работает, переводите приложение в определенное состояние и, возможно, ведите журнал и исключение с полной трассировкой стека в файле журнала.
Поскольку вы обрабатываете все исключения, подобные этойрешение состоит в том, чтобы иметь обработчик исключений для всех целей, который находится на вершине стека приложений и перехватывает все исключения, которые генерируются и распространяются вверх по стеку.С ASP.NET вы можете использовать что-то вроде этого:
http://www.developer.com/net/asp/article.php/961301/Global-Exception-Handling-with-ASPNET.htm
В то же время вы можете переопределить этот глобальный обработчик, поместив блок try / catch в свой код, где вычувствую, что можно что-то сделать, чтобы исправить проблему.