Почему в Yii2 есть валидаторы на mongoid, json

Обсуждаем, как правильно строить приложения
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Почему в Yii2 есть валидаторы на mongoid, json

Сообщение anton_z »

Смотрел несколько проектов на yii/yii2. Везде разработчики пытаются натянуть структуру БД на формы! То бишь есть AR, он же форма с валидаторами. Структура БД не всегда соответсвует форме, и потому появляются методы типа map(), afterValidate() и beforeSave(), которые преобразуют данные форм для сохранения в БД! Все это делается в одном классе AR! Потом появляется другая форма и народ юзает сценарии и по ним делает ветвление в этих преобразующих методах!

Епрст! Это же АДСКИЙ ГОВНОКОД! Какое тут RAD! Когда разрабы yii перестанут так делать??? Yii этому потакает предоставляя сценарии и всякие валидаторы, типа:

https://github.com/yiisoft/yii2-mongodb ... idator.php

Походу народ смотрит на это и сбивается с толку, дескать в yii так и надо - натягивать глаз на ж*пу, то есть структуру БД на формы!
Помогите понять данный парадокс: зачем ж пишутся такие валидаторы?

Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение rugabarbo »

anton_z писал(а):
2017.03.12, 01:15
Смотрел несколько проектов на yii/yii2. Везде разработчики пытаются натянуть структуру БД на формы! То бишь есть AR, он же форма с валидаторами. Структура БД не всегда соответсвует форме, и потому появляются методы типа map(), afterValidate() и beforeSave(), которые преобразуют данные форм для сохранения в БД! Все это делается в одном классе AR! Потом появляется другая форма и народ юзает сценарии и по ним делает ветвление в этих преобразующих методах!

Епрст! Это же АДСКИЙ ГОВНОКОД! Какое тут RAD! Когда разрабы yii перестанут так делать??? Yii этому потакает предоставляя сценарии и всякие валидаторы, типа:

https://github.com/yiisoft/yii2-mongodb ... idator.php

Походу народ смотрит на это и сбивается с толку, дескать в yii так и надо - натягивать глаз на ж*пу, то есть структуру БД на формы!
Помогите понять данный парадокс: зачем ж пишутся такие валидаторы?
В процессе эволюции Yii занял именно такую нишу: RAD-фреймворк с «RAD-манами» – эта ниша имеет свою устойчивую аудиторию, потому что порог входа низкий. Если Yii станет более слоёным, эта аудитория скорее всего разбежится по другим фреймворкам. Итого, подобный подход выкристаллизовался естественным образом – в процессе эволюции фреймворков. Спрос рождает предложение не только на рынке, но и в мире технологий. Копните глубже и поймёте, что точно также развивается сам PHP – низкий порог входа обеспечил его огромной аудиторией. А сам язык по факту полон трэшовых механизмов (как исторических, так и привнесённых со временем).

UPD:

https://habrahabr.ru/post/142140/ – но вы же продолжаете писать на PHP, используя указанные в этой статье конструкции, правильно? Не переходите на более совершенные языки. Вот и разработчики Yii продолжают «рендерить БД в формах». Таково нормальное распределение аудитории, интеллекта, реальных потребностей IT-сферы и т.д.

anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение anton_z »

rugabarbo писал(а):
2017.03.12, 02:17
UPD:

https://habrahabr.ru/post/142140/ – но вы же продолжаете писать на PHP, используя указанные в этой статье конструкции, правильно? Не переходите на более совершенные языки. Вот и разработчики Yii продолжают «рендерить БД в формах». Таково нормальное распределение аудитории, интеллекта, реальных потребностей IT-сферы и т.д.
Не хочется начинать холивар. Статья 2012 года. С тех пор многое поменялось. PHP полон недостатков, но на нем можно жить и работать.
Yii-говнопрогеры усугубляют все своим непониманием ООП и я решил немного пожаловаться.
Да, я знаю небольшой Java-стек, но вакансий в моем городе практически нет. (Думаю, подобная ситуация характерна для любого губернского города).

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

Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение rugabarbo »

anton_z писал(а):
2017.03.12, 04:50
Не хочется начинать холивар. Статья 2012 года. С тех пор многое поменялось. PHP полон недостатков, но на нем можно жить и работать.
Yii-говнопрогеры усугубляют все своим непониманием ООП и я решил немного пожаловаться.
Да, я знаю небольшой Java-стек, но вакансий в моем городе практически нет. (Думаю, подобная ситуация характерна для любого губернского города).

В любом случае, спасибо за точку зрения. Я понял, что поднимать такие вопросы бессмысленно. Можно закрывать тему.
Я не ради холивара. Хотел показать эволюционную природу вещей. Всё начинается в каком-либо виде, а затем кристаллизуется в результат в соответствии с воздействием окружающих факторов. Ну и накладывается ещё инертность толпы: если даже появляется что-то лучшее – миграция толпы на лучшее происходит очень медленно.

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

Аватара пользователя
girmate
Сообщения: 1533
Зарегистрирован: 2015.10.27, 12:52

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение girmate »

rugabarbo писал(а):
2017.03.12, 02:17

В процессе эволюции Yii занял именно такую нишу: RAD-фреймворк с «RAD-манами» – эта ниша имеет свою устойчивую аудиторию, потому что порог входа низкий. Если Yii станет более слоёным, эта аудитория скорее всего разбежится по другим фреймворкам. Итого, подобный подход выкристаллизовался естественным образом – в процессе эволюции фреймворков. Спрос рождает предложение не только на рынке, но и в мире технологий. Копните глубже и поймёте, что точно также развивается сам PHP – низкий порог входа обеспечил его огромной аудиторией.
Хорошо сказано! Именно благодаря низкому порогу вхождения я заинтересовался фреймворком. Yii мой первый фреймворк, поработав с которым я уже понял, что с фреймворков никогда не слезу. И мне нравится то, что хоть я и слаб в PHP, ООП и знаниях разных там парадигм - я смог сделать вполне себе один проект и сейчас начал работу над вторым.
А если бы я попробовал войти в symfony c теми моими знаниями все так и закончилось, не успев начаться. Без хорошего учителя под рукой было бы тяжело или даже невозможно освоить symfony. Нужны более менее твердые знания. И это не значит, что изучая Yii можно начинать говнокодить. Это можно делать на любом фреймворке - примеров очень много.
А программирование я люблю. И с изучением Yii я все глубже и глубже начинаю понимать как лучше делать, как нельзя делать. И на форуме много профессионалов, с которыми решаются любые задачи.
Поверьте, у этого фреймворка тоже есть не маленькая аудитория. Yii уверенно занял свою нишу на рынке фреймворков.

А на тему того, что во фреймворке все сделано не так, как нужно, вопреки всем канонам и правилам, и вообще он прививает неправильную привычку писать программы - это все бред. Для 50% сайтов это и не нужно. Я начинал изучение с yii1, но потом быстро понял, что лучше перескочить на yii2. Мне все очень нравится. Да, у меня практически нет опыта, но я познакомился со многими вопросами по ходу изучения фреймворка.

Yii!
Осторожно! Вы общаетесь с новичком ;)

Аватара пользователя
ElisDN
Сообщения: 5606
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение ElisDN »

anton_z писал(а):
2017.03.12, 01:15
Епрст! Это же АДСКИЙ ГОВНОКОД! Какое тут RAD! Когда разрабы Yii перестанут так делать???
Уже обсуждали с Вами же в viewtopic.php?f=13&t=40623

anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение anton_z »

ElisDN писал(а):
2017.03.12, 09:49
anton_z писал(а):
2017.03.12, 01:15
Епрст! Это же АДСКИЙ ГОВНОКОД! Какое тут RAD! Когда разрабы Yii перестанут так делать???
Уже обсуждали с Вами же в viewtopic.php?f=13&t=40623
Да я не перестаю удивляться, что столько народу делает хрень и при этом убеждены что это суперкруто и они программируют "на современном, профессиональном фреймворке в соответствии с ООП и стандартами". Да, вы правы, с этим надо смириться и работать.

Medic84
Сообщения: 61
Зарегистрирован: 2017.01.28, 17:48

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение Medic84 »

Есть возражения - напиши своё.

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

anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение anton_z »

Medic84 писал(а):
2017.03.13, 08:32
Есть возражения - напиши своё.

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

Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение rugabarbo »

anton_z писал(а):
2017.03.13, 12:27
Medic84 писал(а):
2017.03.13, 08:32
Есть возражения - напиши своё.

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

Аватара пользователя
Cacatuidae
Сообщения: 65
Зарегистрирован: 2017.01.08, 17:39

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение Cacatuidae »

anton_z писал(а):
2017.03.13, 12:27
Medic84 писал(а):
2017.03.13, 08:32
Есть возражения - напиши своё.

Пишешь что, в справке "адский говнокод", но правильный код не прикладываешь, или не пишешь - где написано правильно.
То есть начинающим, которые тут сидят все равно не получится понять что они делают не так, и продолжат писать по примерам из справки.
Для начала нужно, чтобы формы были отдельно, записи в бд отдельно. Их должны представлять отдельные классы. И никаких UTCDate на форме.
Так создали бы статью с примерами "как правильно", и почему это правильно, какой от этого профит и так далее. Ну а так же не забыть упоминуть минусы решений "как правильно", или там нету минусов?)

Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение rugabarbo »

rugabarbo писал(а):
2017.03.13, 12:29
anton_z писал(а):
2017.03.13, 12:27
Medic84 писал(а):
2017.03.13, 08:32
Есть возражения - напиши своё.

Пишешь что, в справке "адский говнокод", но правильный код не прикладываешь, или не пишешь - где написано правильно.
То есть начинающим, которые тут сидят все равно не получится понять что они делают не так, и продолжат писать по примерам из справки.
Для начала нужно, чтобы формы были отдельно, записи в бд отдельно. Их должны представлять отдельные классы. И никаких UTCDate на форме.
Отделять их или нет - решает программист.
Хотя фреймворк тоже "виноват", потому что позволяет рендерить формы на основе AR.

anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение anton_z »

Cacatuidae писал(а):
2017.03.13, 12:32
anton_z писал(а):
2017.03.13, 12:27
Medic84 писал(а):
2017.03.13, 08:32
Есть возражения - напиши своё.

Пишешь что, в справке "адский говнокод", но правильный код не прикладываешь, или не пишешь - где написано правильно.
То есть начинающим, которые тут сидят все равно не получится понять что они делают не так, и продолжат писать по примерам из справки.
Для начала нужно, чтобы формы были отдельно, записи в бд отдельно. Их должны представлять отдельные классы. И никаких UTCDate на форме.
Так создали бы статью с примерами "как правильно", и почему это правильно, какой от этого профит и так далее. Ну а так же не забыть упоминуть минусы решений "как правильно", или там нету минусов?)
Хорошо, надо попробовать написать. "Первый шаг на пути к свету: Разделяем AR и форму" - это заголовок)

Аватара пользователя
samdark
Администратор
Сообщения: 9362
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение samdark »

Если форма начинает не соответствовать модели или использоваться в другом контексте — сделайте ей свою модель, которая к AR отношения не имеет. У нас даже в демо-приложениях есть LoginForm и ContactForm. Если где-то в гайдах мы учим иначе — ткните, поправлю.

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

Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение rugabarbo »

samdark писал(а):
2017.03.13, 15:11
Если форма начинает не соответствовать модели или использоваться в другом контексте — сделайте ей свою модель, которая к AR отношения не имеет. У нас даже в демо-приложениях есть LoginForm и ContactForm. Если где-то в гайдах мы учим иначе — ткните, поправлю.
В гайдах есть. Вот примеры:
* http://stuff.cebe.cc/yii2docs-ru/guide- ... odels.html
* http://stuff.cebe.cc/yii2docs-ru/guide- ... input.html

AR здесь находится непосредственно между вводом пользователя и БД.
samdark писал(а):
2017.03.13, 15:11
В самих сценариях и возможности использовать AR для форм нет ничего ужасного, если не принимать это всё как лучшую практику и не доводить до абсурда.
Я бы сказал так:
* для фиксированных (неразвивающихся) проектов это удобно (позволяет быстро сделать форму и не обслуживать лишние слои)
* для растущих проектов рано или поздно это приводит к необходимости рефакторинга: viewtopic.php?t=16786

Если посмотреть на Symfony, там явное разделение: http://symfony.com/doc/current/forms.ht ... ubmissions – ORM-сущности заполняются с помощью вызова:

Код: Выделить всё

$entity = $form->getData();
Но Symfony точно также позволяет объявлять правила валидации на уровне сущностей: http://symfony.com/doc/current/validati ... validation

Так что дров можно наломать в любом фреймворке.

Аватара пользователя
samdark
Администратор
Сообщения: 9362
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение samdark »

В гайдах есть. Вот примеры
Это табличный ввод. Там что в форме, что в модели поля одинаковые. Никаких отклонений, ничего нового или отличного в форме нет.
для растущих проектов рано или поздно это приводит к необходимости рефакторинга
А может быть как-то ещё? Рефакторинг — это технический долг. Стало нужно отрефакторить — отрефакторили. Не стало нужно — выиграли время.

Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение rugabarbo »

samdark писал(а):
2017.03.13, 18:25
В гайдах есть. Вот примеры
Это табличный ввод. Там что в форме, что в модели поля одинаковые. Никаких отклонений, ничего нового или отличного в форме нет.
С этого обычно и начинается "каша" в коде: "У нас здесь в БД и в HTML-формах поля одинаковые, давайте не париться, сопоставлять их один к одному", – затем появляется с десяток сценариев в каждой модели, затем появляются кейсы с участием нескольких AR, затем эти же AR начинают участвовать в ajax-обработчиках и вычислениях, плавно добавляются сценарии из backend-части... А потом приходит момент (он обязательно приходит), когда всё это дело становится неподдерживаемым. Начинается рефакторинг с адской болью, потому что тесты никто не писал, бизнес требует сохранять темпы, а обращения к AR рассованы по всем кускам кода.
samdark писал(а):
2017.03.13, 18:25
для растущих проектов рано или поздно это приводит к необходимости рефакторинга
А может быть как-то ещё? Рефакторинг — это технический долг. Стало нужно отрефакторить — отрефакторили. Не стало нужно — выиграли время.
Да, может быть. Я работал и так, и так. Скажу, что при большом количестве рефакторинга мотивация команды куда быстрее падает, потому что никто не любит перепиливать уже сделанные вещи. Если в каждом очередном спринте оказывается всего одна новая фича, а остальные задачи по рефакторингу – жди ухода людей.

Я вообще не представляю, какие железные нервы надо иметь, чтобы такие вещи рефакторить: viewtopic.php?t=16786 – поэтому в проектах сделанных на Yii у меня никогда не бывает сценариев и правил валидации в AR.

Аватара пользователя
samdark
Администратор
Сообщения: 9362
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение samdark »

А потом приходит момент (он обязательно приходит), когда всё это дело становится неподдерживаемым.
Момент приходит только если команда понятия не имеет о том, что такое технический долг и что с ним делать. Плюс не может нормально объяснить начальству, зачем нужны тесты и рефакторинг. Плюс не умеет оценивать время с учётом рефакторинга.

В этом случае форсирование использования отдельных моделей для форм не поможет. Результат будет ровно тем же.
Да, может быть. Я работал и так, и так. Скажу, что при большом количестве рефакторинга мотивация команды куда быстрее падает, потому что никто не любит перепиливать уже сделанные вещи. Если в каждом очередном спринте оказывается всего одна новая фича, а остальные задачи по рефакторингу – жди ухода людей.
Поэтому не должно существовать такой штуки как «задача по рефакторингу». Рефакторинг — это не действо само по себе. Он делается с целью. Понадобилось решить задачу реально нужную. Упёрлись в архитектуру, видно как нужно — идём к начальству, объясняем, выбиваем дополнительное время, готовим код под задачу, делаем задачу.
Я вообще не представляю, какие железные нервы надо иметь, чтобы такие вещи рефакторить: viewtopic.php?t=16786
А чего тут сложного? Не понимаю, почему рефакторинг вызывает такую реакцию.

Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение rugabarbo »

По моему опыту выходит так:
1. Тестами всё не покроешь.
2. Технический долг в плохой архитектуре имеет тенденцию расти даже при грамотном техническом менеджменте.
3. Оценивать время на задачу (даже без учёта рефакторинга) умеют 1 программист из 10. В остальных случаях приходится оценку программиста умножать на X.
4. Не всегда с ходу видно, как нужно всё переделать, чтобы сделать новую задачу нормально. Если связанность оказалась слишком высокой, то мозг просто не способен охватить то количество связей и этапов рефакторинга, которые смогут привести систему в норму перед реализацией новой задачи. И тогда наступает печаль.
5. Не встречал программистов, которые любят рефакторить чужой код (а в большинстве случаев приходится именно чужой). Гораздо больше энтузиазма вызывает реализация новой задачи.

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

anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Почему в Yii2 есть валидаторы на mongoid, json

Сообщение anton_z »

samdark писал(а):
2017.03.13, 18:25
А может быть как-то ещё? Рефакторинг — это технический долг. Стало нужно отрефакторить — отрефакторили. Не стало нужно — выиграли время.
Стало нужно - пошли на другую работу.)

Представим, что мы строим дом вместо разработки ПО, а архитектура ПО это фундамент. Если его плохо заложить, то со временем дом придет в негодность и поможет только постройка нового дома. То же самое и с ПО. Народ же придумывает всякие правила и парадигмы, слабую связность, не от того, что делать нечего, а чтобы обеспечить возможность легко адаптировать систему под изменяющиеся требования. А это один из основных показателей качества крупной системы.
samdark писал(а):
2017.03.13, 15:11
Если форма начинает не соответствовать модели или использоваться в другом контексте — сделайте ей свою модель, которая к AR отношения не имеет. У нас даже в демо-приложениях есть LoginForm и ContactForm. Если где-то в гайдах мы учим иначе — ткните, поправлю.
Вот этот валидатор в официальном расширении зачем нужен, если формы и AR надо разделять при малейшем несоответствии?
https://github.com/yiisoft/yii2-mongodb ... idator.php

Народ ведь смотрит, а потом клепает свое:
https://github.com/paulzi/yii2-json-beh ... idator.php

Кстати, чаще всего форма отличается по данным от БД, а не совпадает с ней (кроме приложений-блогов, и то там даты). Может реально рекомендацию напишиете, что нужно разделять? Например, здесь:

http://www.yiiframework.com/doc-2.0/gui ... forms.html

Что-то типа этого:
If a form data structure or a format differs from the database representation, the form model and the row in the database should be represented by different classes.

Ответить