Недавно я получил отзыв от коллеги о моем исходном коде веб-сайта. Он говорит, что это плохая практика - не обрабатывать изящно то, что визуальный интерфейс не позволяет делать.
Так как это не очень понятно, вот пример.
Допустим, посетитель может что-то прокомментировать.
- Комментарий сохраняется в базе данных в столбце
nvarchar(500)
. - Длина поля
<input />
ограничена 500.
Но, конечно, ничто не запрещает более продвинутому пользователю отключить ограничение длины и набрать 501 символ.
(Другие примеры: отправка параметра, которого даже нет в <select />
. Но есть изящная ошибка, когда пользователя просят ввести число, и он вводит вместо числа, поскольку события нажатия клавиш управляются с помощью JavaScript, и JavaScript может быть отключен)
Если посетитель сделает это, произойдет сбой на уровне контрактов кода. Запрос AJAX завершится ошибкой из-за непредвиденной ошибки (или при отправке страницы возникнет непредвиденная ошибка). Во всех случаях посетитель увидит, что произошло что-то не так, но не получит изящного сообщения, указывающего, что длина отправленного комментария слишком велика.
Почему это плохая практика? Зачем мне нужно разрабатывать четкие и ясные сообщения об ошибках для тех случаев, когда посетитель, который правильно использует веб-сайт, никогда их не увидит?
Примечание. Я понимаю, что отображать подробную ошибку .NET Framework и трассировку стека - это отстой, когда происходит что-то подобное. Если я это сделаю, это серьезная проблема безопасности. Но в моем случае есть просто ответ AJAX с чем-то очень общим или перенаправление на общую страницу с извинениями за ошибку.
If the visitor does so, there would be a failure on code contracts level. The AJAX request would fail with an unexpected error (or, on page submit, there will be an unexpected error).
- не должно быть «неожиданной» ошибкой, если она проверена на сервере. Если он был отправлен через AJAX с 501, серверная часть должна обработать его правильно, а не просто дать сбой. - person xil3   schedule 14.01.2011