ASP.NET - Когда использовать пользовательские исключения? - PullRequest
6 голосов
/ 06 сентября 2010

Привет, я постоянно слышу, что я ВСЕГДА должен использовать пользовательские исключения в своих веб-приложениях. Проблема в том, что я не вижу никакой причины для создания пользовательских исключений, когда они все обрабатываются в global.asax ( все равно пишите в базу данных и т. д.) Так зачем мне их использовать?

Ответы [ 4 ]

3 голосов
/ 06 сентября 2010

Я думаю, что строка, где становится хорошей идеей создавать собственные исключения, а не просто использовать стандартные виды исключений с описательными ошибками, приходит где-то в тот момент, когда вам нужно добавить больше данных к исключению. Например, представьте, что у вас есть подпрограмма импорта, и вместо того, чтобы просто генерировать исключение InvalidOperationException при получении искаженных данных, вы можете создать исключение ImporterException и включить в указанное исключение номер строки и необработанные данные импорта?

3 голосов
/ 06 сентября 2010

Я почти никогда не использую пользовательские исключения.Когда я вручную генерирую исключение, я предоставляю подробное сообщение.

Я обнаружил, что обслуживание исключений не стоит хлопот.

Обновление

Позволяет поместить это в контекст.Вопрос в том, должен ли кто-то создавать пользовательские исключения в веб-приложении.Я представляю это как простое приложение.

Веб-приложения

В веб-приложениях вам почти НИКОГДА не нужны пользовательские исключения.Данные записываются в базу данных, а данные считываются из базы данных.Затем данные используются каким-то пользовательским интерфейсом: MVC, WPF, WebForms и т. Д. В таком приложении нет возможности для пользовательских исключений.Каждое приложение отличается от других, поэтому в этом случае будут исключения ...

Каркасы

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

Как отметил @Wyatt Barnett, новое исключение должно предлагать нечто большее, то, что нельзя сделать с существующим классом.

Причина, по которой я бы создал пользовательское исключение

  1. Для передачи более подробной и конкретной информации об ошибке.
  2. Для предоставления средствпоймать эти условия ошибки (то есть «FileNotFoundExeception», это позволяет принять бизнес-решение на более высоком уровне.)
2 голосов
/ 07 сентября 2010

Давайте разберем использование исключений:

Мы генерируем исключение, когда наша рутина сталкивается с этой ситуацией:

«Я не могу продолжать»

Мы генерируем конкретное исключение BCL, когда наша подпрограмма сталкивается с такой ситуацией:

«Я не могу продолжить, и один из более конкретных типов исключений BCL описывает точную причину (например, FileNotFoundException)»

Мы выбрасываем пользовательский тип исключения, когда наша подпрограмма сталкивается с такой ситуацией:

«Я не могу продолжать по причине, которую ни одно из исключений BCL не может точно описать заинтересованным сторонам»

0 голосов
/ 06 сентября 2010

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

Например, метод WriteLine для TextWriter можетвыбросить следующие исключения:

ArgumentNullException
ObjectDisposedException
IOException
FormatException

Представьте себе ваш код, если этот метод будет выдавать только Exception.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...