Вот еще одна проблема: escape-строка не выглядит читаемой при назначении входного значения
var string = _.escape("");
$('input').val(string);
Exapmle: https://jsfiddle.net/kjpdwmqa/3/
Я регистрируюсь во всех уровнях, но я хотел бы отметить прием проверки, который я использую.
Я проверяю в слое базы данных, надлежащие ограничения на Вашу модель обеспечат автоматическую проверку целостности данных.
Это - искусство, которое, кажется, потеряно на большинстве веб-программистов.
В менеджере по Настройкам CompizConfig можно активировать плагин Enable Window Previews
, который не показывает предварительные просмотры для минимизированных окон. (Когда я сначала проверил это, я видел предварительные просмотры - но теперь я не могу воспроизвести его. Кажется, багги.)
Предварительные просмотры для окон на других рабочих областях являются дополнительными; активируйте их путем снятия выделения Taskbar Shows Only Windows of Current Viewport
.
Compiz Wiki говорит: "Предварительные просмотры Окна отображают маленькое миниатюра любого отображенного (не минимизированный) окно , когда Вы нависаете над, он - кнопка в списке окна Вашей настольной среды".
, Но всегда имейте в виду: CCSM является усовершенствованным инструментом. Используйте с осторожностью. Этот инструмент позволяет Вам глубоко настраивать настройки Compiz. Некоторые опции могут быть несовместимыми друг с другом. Если не используется с осторожностью, возможно быть оставленным с неприменимым рабочим столом.
Проверка может быть сделана на всех слоях.
Проверка входа из веб-формы (все строки, бросок к надлежащим типам, и т.д.) отличаются от проверки входа от веб-сервиса или XML-файла, и т.д. У каждого есть его собственные особые случаи. Можно создать класс помощника Блока проверки допустимости, конечно, таким образом воплотив Проверку и позволив этому быть совместно использованными представлениями.
Затем у Вас есть проверка уровня DAO - там достаточно данных в модели для сохранения (для встречи не пустых ограничений, и т.д.) и так далее. У Вас могут даже быть проверочные ограничения в базе данных (состояние в ('N', 'S', 'D') и т.д.).
Проверка в модели, дополнительно автоматизированные стандартные программы в UI, которые понимают их намеки из модели и улучшают пользовательский опыт.
Автоматизированными стандартными программами я подразумеваю, что не должно быть никакого кода на проверку допустимости модели в пользовательском интерфейсе. Если у Вас есть библиотека методов проверки, таких как RoR (который имеет методы как validates_presence_of: имя пользователя) контроллер или представление должны смочь считать их и применить эквивалентный JavaScript (или независимо от того, что удобно), методы.
Это означает, что необходимо будет копировать полную библиотеку проверки в ui или по крайней мере обеспечить отображение при использовании существующего ранее. Но после того как это сделало Вас, не должен будет писать логику проверки вне модели.
Это интересно. В течение самого долгого времени я выполнил всю проверку в модели, прямо выше того, что я рассмотрю DAL (уровень доступа к данным). Мои модели обычно pattern'ed после шлюза данных таблицы с DAL, обеспечивающим абстракцию и низкий уровень API.
В стороне TDG я реализовал бы бизнес-логику и проверки, такие как:
Поскольку мое приложение выросло в сложности, я начал понимать, что так большая часть проверки могла быть сделана на стороне клиента, с помощью JavaScript. Таким образом, я осуществил рефакторинг большую часть логики проверки в JS и cleanuped мои модели.
Затем я понял, что серверная проверка (не фильтрующий/выходящий - который я считаю отличающимися) должна, вероятно, быть сделана в сервере также и только стороне клиента как обледенение на пироге.
Таким образом, отступите, логика проверки пошла, когда я понял снова, что были, вероятно, явные различия между Контролем ввода / утверждение и бизнес-правилами/логикой.
В основном, если это может быть сделано в стороне клиента приложения (использующий JS), я полагаю, что это Контроль ввода..., если это ДОЛЖНО быть сделано моделью (это записывает, уже существуют, и т.д.?) затем я рассмотрел бы ту бизнес-логику. То, что сбивает с толку, является ими обоими protecte целостность модели данных.
Если Вы' не проверяете длину имени пользователя затем, что должно мешать людям создать односимвольное имя пользователя?
Я все еще не полностью решил, куда поместить ту логику затем, я думаю, что она действительно зависит от того, что Вы одобряете больше, тонкие контроллеры, тяжелые модели или визу-versa...
Контроллеры в моем случае имеют тенденцию быть намного большим количеством центрального приложения, тогда как модели, если обработано тщательно я могу часто снова использовать в "других" проектах не только внутренне, таким образом, я предпочитаю сохранять легкий вес моделей и контроллеры на более тяжелой стороне.
Чем управляют силы, Вы в любом направлении - действительно личное мнение, требования, события, и т.д...
Интересный предмет :)
Проверка должна быть сделана в контроллере - это - единственное место, которое гарантирует безопасность и ответ.
Проверка должна быть сделана в представлении - это - точка контакта и обеспечит лучший UE и сохранит Ваш сервер дополнительная работа.
Проверка будет сделана на модели - но только для определенного базового уровня проверок. Базы данных должны всегда отражать соответствующие ограничения, но это неэффективно для разрешения этому стенду для реальной проверки, и при этом для базы данных не всегда возможно определить допустимый вход с простыми ограничениями.
Вся проверка должна произойти по крайней мере в один раз, и это должно быть на среднем уровне, ли она быть в Ваших объектах значения (в смысле DDD, не быть перепутанным с DTO), или через бизнес-объект самого объекта. Клиентская проверка может произойти для улучшения пользовательского опыта. Я склонен не делать клиентскую проверку, потому что я могу просто выставить все вещи, которые являются неправильными в форме сразу, но это - просто мое персональное предпочтение, проверка базы данных может произойти для обеспечения целостности данных в случае, если Вы завинтили логику на среднем уровне или назад закончили что-то.
Я только делаю это в Представлении и Контроллере, база данных осуществляет часть этого Вашими типами данных и этажеркой, но я быть бы он не получать это далеко без меня фиксирующий ошибку.
Вы в значительной степени ответили на свой собственный вопрос, хотя, важная вещь знать состоит в том, что Вы никогда не можете доверять представлению, хотя это - самый легкий маршрут, чтобы дать обратную связь пользователю, таким образом, необходимо санировать по крайней мере на еще одном уровне.
Поскольку большая часть проверок зависит от бизнес-правил , я провожу проверку на бизнес-уровне как классы сторонних инструментов. Существуют и другие типы проверок, такие как ввод данных пользователем, которые должны выполняться в контроллере, но вы также можете инкапсулировать эти правила проверки в сторонних классах. На самом деле, это зависит от того, что проверять.
Проверки на стороне клиента - второстепенные, они сделаны только для создания облегченной проверки ввода , но проверка на стороне сервера требуется всегда . Никогда нельзя доверять пользовательскому вводу;)
.NET имеет хорошие элементы управления для создания проверок, но бизнес-уровень всегда нуждается в лучшем подходе для проверки данных, а этих элементов управления недостаточно. к этой задаче.
Хммм, не уверен. Я бы сказал «Контроллер», пока не прочитал эту статью: «Тонкие контроллеры, толстые модели»
Простая проверка ввода в представлении. Полная проверка в модели. Причина? Если вы измените технологию представления, а проверка находится в представлении / контроллере, вам придется переписать проверку для нового представления. Это может привести к ошибкам. Поместите его в модель, и это будет повторно использовано всеми представлениями ...
Но, как я уже сказал, простая проверка в представлении для скорости и простоты.