Как избежать дублирования проверки на сервере и на стороне клиента?
Как избежать дублирования проверки на сервере и на стороне клиента? Существует ли платформа веб-программирования, которая генерирует одно из другого, поэтому мне не нужно синхронизировать эти два?
8 ответов
Существуют платформы, которые могут генерировать проверку на стороне клиента из конфигурации проверки на стороне сервера.
Сейчас я не знаю, какой язык или рамки вы используете, но, может быть, эта статья поможет вам: http://www.emadibrahim.com/2008/09/08/client-server-side-validation-in-aspnet-mvc/
Он использует Castle Validator Component вместе с JQuery и добавляет клей для генерации проверки на стороне клиента на основе атрибутов проверки на стороне сервера. Это для asp.net MVC.
/ Asger
Я думаю, что лучший способ - использовать компонент, который предлагает оба варианта. Их код был протестирован, и вам не нужно его поддерживать. Я использовал контроль Питера Блума в прошлом с большим успехом. Кроме этого, я думаю, вам придется поддерживать две базы кода, если вы хотите предложить обе. Существует инструмент под названием Script#, который может помочь скомпилировать C# в Javascript (он выполняет перевод, а не реальную компиляцию), но я не уверен, насколько хорошо он будет работать в этой ситуации.
Большинство отказывается от написания сценариев на стороне клиента и в настоящее время просто работает на стороне сервера. Вы можете использовать ajax при отправке поста, так что ответ немного легче, чем перезагрузка всей страницы.
Проверка на стороне сервера требуется просто потому, что проверка на стороне клиента может быть отключена.
Проверка на стороне клиента не требуется, но она делает ваше приложение более отзывчивым во время обработки ошибок, так как вам больше не нужно отправлять форму на сервер и ждать, пока полученная страница не вернется.
Хорошо разработанное приложение использует оба.
Как примечание, Ajax может использоваться для определенных видов проверки, таких как проверка на наличие дублированных имен пользователей в форме регистрации пользователя. Тем не менее, базовая проверка, такая как проверка, содержит ли поле только цифры, должна выполняться без него.
Как уже упоминалось, вы должны сохранять дублирование, так как проверка на стороне клиента должна помочь приложению быстрее реагировать, чтобы помочь пользователю, но настоящая проверка выполняется на стороне сервера, так как вы никогда не должны доверять чему-либо переданному до тех пор, пока был подтвержден. Вы, вероятно, проведете более обширную проверку на стороне сервера, особенно если есть необходимость сверяться с источником данных, например, является ли уникальное имя пользователя на стороне сервера, но достаточно ли длинное имя пользователя или адрес электронной почты, может быть сделано на стороне клиента и на стороне сервера.
Я имею тенденцию помещать в комментарии, когда есть дублирование, особенно если я использую регулярное выражение, чтобы удостовериться, что то, что изменяется в одном, изменяется в другом.
Хорошие модульные тесты помогут гарантировать, что эти два всегда будут синхронизированы.
В Asp.net версии 1 были элементы управления валидатора, чтобы делать то, что вы просите
То, что вы можете сделать, - это запустить логику проверки на стороне сервера веб-сервисами, которые ваша проверка на стороне клиента может вызывать через AJAX, а также когда вы отправляете сообщение обратно на ваш сервер.
В большинстве случаев лучше проводить проверку на стороне сервера. У вас есть много разных способов сделать это проще, например, Ajax или использование липких форм в PHP. Лично я склонен выполнять проверку на стороне сервера, потому что у пользователя есть возможность отключить JavaScript, и он не может отключить проверку на сервере.....