Где разместить логику проверки в архитектуре программного обеспечения MVC - PullRequest
5 голосов
/ 11 ноября 2011

На самом деле я начинаю изучать архитектуру mvc.

Я не уверен, стоит ли размещать мою логику проверки регистрации имени пользователя в модели или в контроллере.

У меня какой-то статуссообщение, которое сообщит пользователю, доступно ли новое имя пользователя для регистрации.

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

Моя проблемана самом деле это не основа для использования, а стандартная концепция, включающая MVC.Где я могу разместить логику проверки имени пользователя на основе указанных выше условий / предпосылки?

Ответы [ 3 ]

4 голосов
/ 11 ноября 2011

Как говорит Шихар, фактическая проверка того, является ли имя приемлемым / доступным, является обязанностью модели.Контроллер может предоставить действие, которое вызывается некоторым AJAX на странице, так что при нажатии каждой клавиши текст на странице отправляется на выделенное действие контроллера, которое затем проверяет его через модель (все, что касается базы данных, являетсяМодель).

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

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

4 голосов
/ 11 ноября 2011

Это должно быть в той модели, которую вы прочитали сами. Я думаю, что вы путаетесь между «процессом проверки» и «правилами проверки». Процесс валидации будет либо в контроллере на стороне клиента, но правила валидации являются свойствами модели.

0 голосов
/ 23 мая 2016

Как дополнение к @Colin Desmond, экземпляр модели никогда не должен содержать «неправильных» данных и, таким образом, на мой взгляд, в среде MVC должен содержать логику проверки.Таким образом, независимо от места создания экземпляра модели, его нельзя инициализировать неверными данными, а классы, которые работают с экземпляром модели, могут полагаться на его данные.Исключением является наличие логики проверки, зависящей от представления.Вид зависимой логики (исключения) должен быть реализован в контроллере.

Например, в модели должна быть реализована проверка адреса электронной почты.Однако модель может разрешить банковскую транзакцию с отрицательной суммой, а представление A может не разрешить транзакцию с отрицательной суммой.Логика для этого исключения должна быть реализована на контроллере.

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