Есть ли более элегантный способ обработки ошибок, чем распространение try / catch во всем коде приложения? - PullRequest
5 голосов
/ 18 ноября 2010

Я обнаружил, что слишком много занимаюсь обработкой ошибок с помощью операторов try \ catch и получаю уродливый код.У вас, ребята, есть какая-то техника или рамки, чтобы сделать это более элегантным?(В окнах c # формы или asp.net).

Ответы [ 5 ]

6 голосов
/ 18 ноября 2010

Вы должны прочитать о структурированной обработке исключений.Если вы используете столько обработчиков исключений, сколько это звучит, значит, вы делаете это неправильно.

Обработка исключений не похожа на проверку возвращаемых значений.Вы должны обрабатывать некоторые исключения в ограниченных ключевых местах в вашем коде не везде.Помните, что исключения «заполняют» стек вызовов!

Вот хорошая и хорошо проверенная статья CodeProjec t о лучших практиках исключений.

1 голос
/ 18 ноября 2010

У земли 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 в свой код, где вычувствую, что можно что-то сделать, чтобы исправить проблему.

0 голосов
/ 19 ноября 2010

http://msdn.microsoft.com/en-us/library/ff664698(v=PandP.50).aspx

Ознакомьтесь с блоком приложений Microsoft по обработке исключений.У него есть начальная кривая обучения, но это хорошая вещь, как только вы поймете это.

0 голосов
/ 18 ноября 2010

Такая сильная зависимость от обработки исключений (на любом языке) предполагает, что механизм используется не по назначению.Я всегда понимал, что обработка исключений была разработана, чтобы поймать действительно исключительное, непредвиденное событие.Он не предназначен для обработки (например) неверного ввода данных пользователем - это нормальная операция, и ваш дизайн и код приложения должны иметь дело с такой нормальной обработкой.

0 голосов
/ 18 ноября 2010

Простое добавление Try Catch не решает проблему. Эта тема слишком большая, чтобы рассматривать ее как один вопрос. Вам нужно немного почитать.

http://msdn.microsoft.com/en-us/library/8ey5ey87%28VS.71%29.aspx

http://www.codeproject.com/KB/architecture/exceptionbestpractices.aspx

Также FXCop и VS Team System предупредят вас о некоторых проблемах проектирования.

...