Судя по тому, является ли исключение исключительным - PullRequest
0 голосов
/ 01 мая 2011

Это довольно популярная и общеизвестная фраза о том, что вы должны «ловить / выдавать только исключительные ситуации». Однако как определяется «исключительное» исключение?

Например, неверный пароль очень обычен при входе в службу, так что это не исключение. Статистика веб-приложения может показывать что-то вроде одной неудачной попытки входа в систему на каждые 5 попыток (без конкретного пользователя). Аналогично, при попытке перейти к оформлению заказа с корзиной в интернет-магазине это может быть очень распространенным явлением (особенно для новых пользователей). Тем не менее, файл не найден может пойти в любую сторону Я обычно работаю в том же духе: если в методе чего-то не хватает для выполнения своей работы, выдается исключение, но здесь это немного сбивает с толку. В некоторых случаях файл, который не был найден, может быть распространенным (например, общий файловый ресурс, используемый многими пользователями без жесткого контроля), по сравнению с очень закрытой рабочей средой, в которой отсутствует файл, что было бы исключительным.

Это правильный способ сделать вывод, является ли исключение исключительным или нет? Я могу легко фильтровать такие вещи, как отсутствие сетевого подключения и т. Д., Как исключительные, но о некоторых случаях трудно судить. Это субъективно?

Спасибо

1 Ответ

1 голос
/ 01 мая 2011

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

Вместо этого я предпочитаю рассмотреть три вещи:

  1. Возможно ли, что я захочу, чтобы стек вызовов раскрутил более одного уровня?
  2. Есть ли другой способ?(Вернуть ноль или код ошибки и т. Д.) Если да, то есть ли у меня хоть малейшая проблема с производительностью?
  3. Если ни один из них не приводит к четкому решению, которое легче прочитать тому, кто должен поддерживатькод?

Если # 1 верно, и у меня нет проблем с производительностью MAJOR, я, вероятно, решу использовать исключения, потому что это ускорит мое время разработки, чтобы не возвращать кодкоды (и вручную кодируют логику, чтобы они распространялись вверх по стеку вызовов при необходимости).Когда вы используете исключения, раскрутка стека вызовов бесплатна на время разработки.

Если # 2 имеет значение true, или я не собираюсь больше одного кадра (может быть, два?) Вверх по стеку вызовов, или яЕсли у вас есть серьезные проблемы с производительностью (например, в узком цикле), то я очень постараюсь найти другой способ, который не включает исключения.

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

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