Это плохо, чтобы бросить исключения, чтобы вернуть ошибки сервера, например. 404 Страница не найдена? - PullRequest
7 голосов
/ 07 мая 2010

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

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

Ответы [ 4 ]

8 голосов
/ 07 мая 2010

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

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

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

Если вы используете инфраструктуру MVC, и ваши отдельные контроллеры могут установить код ответа, тогда разрешите им.

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

2 голосов
/ 07 мая 2010

Исключениями не являются механизмы управления потоком.

0 голосов
/ 07 мая 2010

Я думаю, вы говорите о двух разных вещах:

  1. Ошибки, возникающие, когда что-то пошло не так в самой платформе, или если каркас используется таким образом, что он не должен работать.
  2. Коды состояния HTTP (Страница 404 Страница не найдена, упомянутая в теме - это код состояния).

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

0 голосов
/ 07 мая 2010

Исключения должны быть ограничены ТОЛЬКО теми временами, когда приложение действительно не может справиться с ситуацией.

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

Единственные ситуации с ошибками типа сервера, с которыми я могу столкнуться, это если требуемый ресурс (например, ваш sql-сервер) не был доступен.

Кроме того, доступ запрещен и т. Д. - это все обычные случаи, которые ваше приложение должно обрабатывать обычным способом.

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