[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MVC
paul85
Всех приветствую!

Задался вопросом: где же все-таки правильно производить валидацию введенный пользователем данных? Наткнулся на такое мнение: если не задействована бизнес-логика, то в контроллере. А иначе в модели.

В тех фреймворках, что я видел, вроде как всегда в модели... По идее молель - штука, которая должна работать с данными. Но с другой стороны запись flash сообщений из контроллера выглядит более гармонично. Потому, что требуется обращение к другой модели (user). А между моделями без контроллера работать и вовсе не положено.

На сегодняшний день валидация у меня размазана и на контроллеры и на модели. Это неправильно, ИМХО.

Что скажете?
T1grOK
Цитата (paul85 @ 29.06.2014 - 02:45)
А между моделями без контроллера работать и вовсе не положено.

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

Цитата (paul85 @ 29.06.2014 - 02:45)
Задался вопросом: где же все-таки правильно производить валидацию введенный пользователем данных?

Все параметры валидации в модели, вызов в контроллере.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
bestxp
Валидация в классе формы и иметь отдельный валидатор
paul85
Цитата (T1grOK @ 29.06.2014 - 18:30)
практикую вызов из одной модели другую, без фанатизма конечно.

Правда? Мне почему-то запомнилось, что вызов моделей друг из друга не айс. Но если нормальная практика, то жизнь существенно упрощается.

Цитата (bestxp @ 29.06.2014 - 23:35)
Валидация в классе формы и иметь отдельный валидатор

Это как так? То есть класс для обработки запросов? Ну хорошо, а сам факт, что прилетела форма, например, где тогда отлавливать. Получается все-равно в контроллере.
bestxp
1 класс = 1 ответственность

Валидация это не ответственность модели , но часто этим принебрегают

chee
Цитата (bestxp @ 30.06.2014 - 10:09)
Валидация это не ответственность модели , но часто этим принебрегают

модель должна предоставить информацию для валидации. А валидировать возможно должен кто то другой. Хотя возможно и сама модель может в некоторых случаях.

Цитата (paul85 @ 30.06.2014 - 00:32)

Правда? Мне почему-то запомнилось, что вызов моделей друг из друга не айс. Но если нормальная практика, то жизнь существенно упрощается.

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

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
SlavaFr
Цитата (paul85 @ 29.06.2014 - 02:45)
На сегодняшний день валидация у меня размазана и на контроллеры и на модели. Это неправильно, ИМХО.

Валидацию лучше делать в модели, а в контроллере обрабатывать Exceptions которые возникают в результате не валидных вводов и при надобности делать фильтрацию данных.

Чисто мое мнение...


Цитата (bestxp @ 30.06.2014 - 06:09)
Валидация это не ответственность модели , но часто этим принебрегают
В отношение ответственности ты прав, но дело в том, что даже если валидация будет в отдельном месте, она все ровно на прямую привязана к модели. Я бы создавал бы валидацию отдельно только в случае если она имела различные применения для конкретной модели, в противном случае код стал бы легко расширяемым, но в то же время менее понятным. Я бы лучше подождал случая, когда появится реальная надобность для создания разных валидаторов и только в этом случае сделал бы рефакторинг для расширения кода для различных валидаторов модели.

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
kaww
Цитата (SlavaFr @ 1.07.2014 - 13:01)
Я бы создавал бы валидацию отдельно только в случае если она имела различные применения для конкретной модели

Вот вам вариант - система комментирования. Пользователи не могут использовать, например, теги и для них ограничена длинна комментария. Администратору же доступны html-теги (набор тегов) и нет ограничений (не такие жесткие) на длину сообщения как в админке так и на страницах сайта.

По теме, валидация, фильтрация проходит в формах, что считаю логичным и очень удобным (пример, Zend framework)
SlavaFr
@kaww ты о фильтре рассказал, а не о валидаторе модели, но дело в принципе не в этом, как я уже написал, если требуется больше чем один валидатор, то безусловно рефакторинга с заменимыми валидаторами для модели не избежать. Программировать возможности для расширения за ранее, имеет прямой смысл только в библиотеках, а не в конкретных одноразовых случиях типа специфической модели в виде врапера для для конкретной таблицы в БД. Если код хорошо капсулирован в методах и имеется достаточно интеграционных и юнит тестов, то сделать рефакторинг для расширения будет детской игрой.

В любом случае я хотел сказать, что в наших вариантах подхода к этому вопросу нет не у кого ошибки. Это просто дело договоренности в команде, я бы если делал review кода модели в котором бы был заменяемый валидатор и понятный фактори метод с доступной документацией , тоже бы не придирался... smile.gif

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
paul85
Ушел переваривать... =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.