paul85
29.06.2014 - 06:45
Всех приветствую!
Задался вопросом: где же все-таки правильно производить валидацию введенный пользователем данных? Наткнулся на такое мнение: если не задействована бизнес-логика, то в контроллере. А иначе в модели.
В тех фреймворках, что я видел, вроде как всегда в модели... По идее молель - штука, которая должна работать с данными. Но с другой стороны запись flash сообщений из контроллера выглядит более гармонично. Потому, что требуется обращение к другой модели (user). А между моделями без контроллера работать и вовсе не положено.
На сегодняшний день валидация у меня размазана и на контроллеры и на модели. Это неправильно, ИМХО.
Что скажете?
T1grOK
29.06.2014 - 18:30
Цитата (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
29.06.2014 - 23:35
Валидация в классе формы и иметь отдельный валидатор
paul85
30.06.2014 - 00:32
Цитата (T1grOK @ 29.06.2014 - 18:30) |
практикую вызов из одной модели другую, без фанатизма конечно. |
Правда? Мне почему-то запомнилось, что вызов моделей друг из друга не айс. Но если нормальная практика, то жизнь существенно упрощается.
Цитата (bestxp @ 29.06.2014 - 23:35) |
Валидация в классе формы и иметь отдельный валидатор |
Это как так? То есть класс для обработки запросов? Ну хорошо, а сам факт, что прилетела форма, например, где тогда отлавливать. Получается все-равно в контроллере.
bestxp
30.06.2014 - 10:09
1 класс = 1 ответственность
Валидация это не ответственность модели , но часто этим принебрегают
Цитата (bestxp @ 30.06.2014 - 10:09) |
Валидация это не ответственность модели , но часто этим принебрегают |
модель должна предоставить информацию для валидации. А валидировать возможно должен кто то другой. Хотя возможно и сама модель может в некоторых случаях.
Цитата (paul85 @ 30.06.2014 - 00:32) |
Правда? Мне почему-то запомнилось, что вызов моделей друг из друга не айс. Но если нормальная практика, то жизнь существенно упрощается. |
Это не нормальная практика, лучше использовать обрабочик событий. То есть выполняешь какой то экшен в модели, а в нем вызываются события, на которые ты навешиваешь вызовы методов классов(не других моделей, а вообще отдельных сущностей), который будут работать не только с этой моделью, но и со связаными, в итоге 2е модели не знают о себе, а знает только какой-то левый кусок кода, который вызывается через события.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
SlavaFr
1.07.2014 - 17:01
Цитата (paul85 @ 29.06.2014 - 02:45) |
На сегодняшний день валидация у меня размазана и на контроллеры и на модели. Это неправильно, ИМХО. |
Валидацию лучше делать в модели, а в контроллере обрабатывать Exceptions которые возникают в результате не валидных вводов и при надобности делать фильтрацию данных.
Чисто мое мнение...
Цитата (bestxp @ 30.06.2014 - 06:09) |
Валидация это не ответственность модели , но часто этим принебрегают |
В отношение ответственности ты прав, но дело в том, что даже если валидация будет в отдельном месте, она все ровно на прямую привязана к модели. Я бы создавал бы валидацию отдельно только в случае если она имела различные применения для конкретной модели, в противном случае код стал бы легко расширяемым, но в то же время менее понятным. Я бы лучше подождал случая, когда появится реальная надобность для создания разных валидаторов и только в этом случае сделал бы рефакторинг для расширения кода для различных валидаторов модели.
_____________
↓↓↓↓↓↓↓↓↓↓ответ может быть здесьили в mysql_error();
Цитата (SlavaFr @ 1.07.2014 - 13:01) |
Я бы создавал бы валидацию отдельно только в случае если она имела различные применения для конкретной модели |
Вот вам вариант - система комментирования. Пользователи не могут использовать, например, теги и для них ограничена длинна комментария. Администратору же доступны html-теги (набор тегов) и нет ограничений (не такие жесткие) на длину сообщения как в админке так и на страницах сайта.
По теме, валидация, фильтрация проходит в формах, что считаю логичным и очень удобным (пример, Zend framework)
SlavaFr
2.07.2014 - 10:40
@kaww ты о фильтре рассказал, а не о валидаторе модели, но дело в принципе не в этом, как я уже написал, если требуется больше чем один валидатор, то безусловно рефакторинга с заменимыми валидаторами для модели не избежать. Программировать возможности для расширения за ранее, имеет прямой смысл только в библиотеках, а не в конкретных одноразовых случиях типа специфической модели в виде врапера для для конкретной таблицы в БД. Если код хорошо капсулирован в методах и имеется достаточно интеграционных и юнит тестов, то сделать рефакторинг для расширения будет детской игрой.
В любом случае я хотел сказать, что в наших вариантах подхода к этому вопросу нет не у кого ошибки. Это просто дело договоренности в команде, я бы если делал review кода модели в котором бы был заменяемый валидатор и понятный фактори метод с доступной документацией , тоже бы не придирался...
_____________
↓↓↓↓↓↓↓↓↓↓ответ может быть здесьили в mysql_error();
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.