Где Вы делаете свою проверку? модель, контроллер или представление

Вот еще одна проблема: escape-строка не выглядит читаемой при назначении входного значения

var string = _.escape("");
$('input').val(string);

Exapmle: https://jsfiddle.net/kjpdwmqa/3/

12
задан Jorge Castro 8 July 2012 в 16:48
поделиться

11 ответов

Я регистрируюсь во всех уровнях, но я хотел бы отметить прием проверки, который я использую.

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

Это - искусство, которое, кажется, потеряно на большинстве веб-программистов.

7
ответ дан 2 December 2019 в 06:46
поделиться

В менеджере по Настройкам CompizConfig Install compizconfig-settings-manager можно активировать плагин Enable Window Previews, который не показывает предварительные просмотры для минимизированных окон. (Когда я сначала проверил это, я видел предварительные просмотры - но теперь я не могу воспроизвести его. Кажется, багги.)

Предварительные просмотры для окон на других рабочих областях являются дополнительными; активируйте их путем снятия выделения Taskbar Shows Only Windows of Current Viewport.

Compiz Wiki говорит: "Предварительные просмотры Окна отображают маленькое миниатюра любого отображенного (не минимизированный) окно , когда Вы нависаете над, он - кнопка в списке окна Вашей настольной среды".

, Но всегда имейте в виду: CCSM является усовершенствованным инструментом. Используйте с осторожностью. Этот инструмент позволяет Вам глубоко настраивать настройки Compiz. Некоторые опции могут быть несовместимыми друг с другом. Если не используется с осторожностью, возможно быть оставленным с неприменимым рабочим столом.

1
ответ дан Community 22 October 2019 в 14:47
поделиться

Проверка может быть сделана на всех слоях.

Проверка входа из веб-формы (все строки, бросок к надлежащим типам, и т.д.) отличаются от проверки входа от веб-сервиса или XML-файла, и т.д. У каждого есть его собственные особые случаи. Можно создать класс помощника Блока проверки допустимости, конечно, таким образом воплотив Проверку и позволив этому быть совместно использованными представлениями.

Затем у Вас есть проверка уровня DAO - там достаточно данных в модели для сохранения (для встречи не пустых ограничений, и т.д.) и так далее. У Вас могут даже быть проверочные ограничения в базе данных (состояние в ('N', 'S', 'D') и т.д.).

4
ответ дан 2 December 2019 в 06:46
поделиться

Проверка в модели, дополнительно автоматизированные стандартные программы в UI, которые понимают их намеки из модели и улучшают пользовательский опыт.

Автоматизированными стандартными программами я подразумеваю, что не должно быть никакого кода на проверку допустимости модели в пользовательском интерфейсе. Если у Вас есть библиотека методов проверки, таких как RoR (который имеет методы как validates_presence_of: имя пользователя) контроллер или представление должны смочь считать их и применить эквивалентный JavaScript (или независимо от того, что удобно), методы.

Это означает, что необходимо будет копировать полную библиотеку проверки в ui или по крайней мере обеспечить отображение при использовании существующего ранее. Но после того как это сделало Вас, не должен будет писать логику проверки вне модели.

5
ответ дан 2 December 2019 в 06:46
поделиться

Это интересно. В течение самого долгого времени я выполнил всю проверку в модели, прямо выше того, что я рассмотрю DAL (уровень доступа к данным). Мои модели обычно pattern'ed после шлюза данных таблицы с DAL, обеспечивающим абстракцию и низкий уровень API.

В стороне TDG я реализовал бы бизнес-логику и проверки, такие как:

  1. Пустое имя пользователя
  2. Имя пользователя> 30 символов
  3. Если запись не существует, возвратите ошибку

Поскольку мое приложение выросло в сложности, я начал понимать, что так большая часть проверки могла быть сделана на стороне клиента, с помощью JavaScript. Таким образом, я осуществил рефакторинг большую часть логики проверки в JS и cleanuped мои модели.

Затем я понял, что серверная проверка (не фильтрующий/выходящий - который я считаю отличающимися) должна, вероятно, быть сделана в сервере также и только стороне клиента как обледенение на пироге.

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

В основном, если это может быть сделано в стороне клиента приложения (использующий JS), я полагаю, что это Контроль ввода..., если это ДОЛЖНО быть сделано моделью (это записывает, уже существуют, и т.д.?) затем я рассмотрел бы ту бизнес-логику. То, что сбивает с толку, является ими обоими protecte целостность модели данных.

Если Вы' не проверяете длину имени пользователя затем, что должно мешать людям создать односимвольное имя пользователя?

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

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

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

Интересный предмет :)

3
ответ дан 2 December 2019 в 06:46
поделиться

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

Проверка должна быть сделана в представлении - это - точка контакта и обеспечит лучший UE и сохранит Ваш сервер дополнительная работа.

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

3
ответ дан 2 December 2019 в 06:46
поделиться

Вся проверка должна произойти по крайней мере в один раз, и это должно быть на среднем уровне, ли она быть в Ваших объектах значения (в смысле DDD, не быть перепутанным с DTO), или через бизнес-объект самого объекта. Клиентская проверка может произойти для улучшения пользовательского опыта. Я склонен не делать клиентскую проверку, потому что я могу просто выставить все вещи, которые являются неправильными в форме сразу, но это - просто мое персональное предпочтение, проверка базы данных может произойти для обеспечения целостности данных в случае, если Вы завинтили логику на среднем уровне или назад закончили что-то.

2
ответ дан 2 December 2019 в 06:46
поделиться

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

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

0
ответ дан 2 December 2019 в 06:46
поделиться

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

Проверки на стороне клиента - второстепенные, они сделаны только для создания облегченной проверки ввода , но проверка на стороне сервера требуется всегда . Никогда нельзя доверять пользовательскому вводу;)

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

0
ответ дан 2 December 2019 в 06:46
поделиться

Хммм, не уверен. Я бы сказал «Контроллер», пока не прочитал эту статью: «Тонкие контроллеры, толстые модели»

http://blog.astrumfutura.com/archives/373-The-M-in-MVC-Why-Models-are-Misunderstanding -and-Unappreciated.html

0
ответ дан 2 December 2019 в 06:46
поделиться

Простая проверка ввода в представлении. Полная проверка в модели. Причина? Если вы измените технологию представления, а проверка находится в представлении / контроллере, вам придется переписать проверку для нового представления. Это может привести к ошибкам. Поместите его в модель, и это будет повторно использовано всеми представлениями ...

Но, как я уже сказал, простая проверка в представлении для скорости и простоты.

-1
ответ дан 2 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: