разделить rules на 2 части
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: разделить rules на 2 части
zelenin, ОК, допустим мы захотим разделить (хоть и не вижу я особо профита). Почему именно behavior? Варианты:
1. behavior.
2. afterValidate().
3. Новый метод filters.
4. Два новых метода: validationRules, filterRules.
5. ...
И ещё вопрос на тему default остаётся. Фильтр это или валидатор?
1. behavior.
2. afterValidate().
3. Новый метод filters.
4. Два новых метода: validationRules, filterRules.
5. ...
И ещё вопрос на тему default остаётся. Фильтр это или валидатор?
Нравится Yii? Давайте сделаем его лучше!.
Re: разделить rules на 2 части
Давайте не будем притягивать за уши умные слова из SOLID про единую ответственность (SRP) и прочее. Метод `rules()` это сервисный метод, где перечисляются правила фильтрации и валидации. Это просто список. Никакого нарушения SRP в нем нет!zelenin писал(а): а как же единая ответственность?) зачем документально фиксировать ошибку в проектировании, если можно в в 2.0.* добавить еще одно поведение, а в 2.1 удалить defaultValidator и filterValidator?
Вам уже показали, что удобство объективно уменьшится. И уменьшится оно без каких либо на то оснований.zelenin писал(а): От удаления фильтров удобство не уменьшится, да и для кого фреймворк - для домохозяек что ли, что испугает незначителньое увеличение кода?
Всё и ТАК правильно. У нас валидация валидирует и не меняет значения. То что правила валидации и фильтрации в виде списка живут в одном месте, так это из практических соображений. И это ничего не нарушает абсолютно.zelenin писал(а): Во-первых надо руководствоваться хотя бы минимальной (!) правильностью.
@sam_dark Я предлагаю в 2.1 сделать следующее. Во первых переместить `\yii\validation` в `\yii\rules`. А фильтры выделить в отдельное понятие `Filters` со своим базовым классом. И тогда точно никакой путаницы не будет.
Re: разделить rules на 2 части
это уже работает. У многих висит там уже какая-то фильтрация/трансформация - слагифай, транслит, нормализация юникода, пурифай итд итп.Sam Dark писал(а):zelenin, ОК, допустим мы захотим разделить (хоть и не вижу я особо профита). Почему именно behavior? Варианты:
1. behavior.
ну это отличается от п.1 тем, что придется самому разработчику писать код, который может быть инкапсулирован в поеведении. Означает, что функционал удалили без замены.Sam Dark писал(а):2. afterValidate().
уже появились attributeHints - ужас. Зачем плодить новую сущность?Sam Dark писал(а):3. Новый метод filters.
4. Два новых метода: validationRules, filterRules.
5. ...
третьеSam Dark писал(а):И ещё вопрос на тему default остаётся. Фильтр это или валидатор?
а по мне так было бы нормально и вообще поведения убрать, как планируется, но это будет потрясение для нежных девелоперов.
Re: разделить rules на 2 части
это неконструктивный диалог, когда вы подменяете понятия. Показали изменения трех строчек на три строчки (71 символ на 140 символов). Объективно уменьшилось удобство? Такой манерой диалога вы навязываете свое мнение.creocoder писал(а): Вам уже показали, что удобство объективно уменьшится. И уменьшится оно без каких либо на то оснований.
Re: разделить rules на 2 части
Неконструктивный диалог это когда вы тащите в качестве аргументов SRP не понимая до конца что это такое и что применить это к методу `rules()`, который отдает просто список это бред сивой кобылы. Метод `rules()` с позиции SRP корректный на 100%, потому что он выполняет единственную задачу "отдать список".zelenin писал(а):это неконструктивный диалог, когда вы подменяете понятия. Показали изменения трех строчек на три строчки (71 символ на 140 символов). Объективно уменьшилось удобство? Такой манерой диалога вы навязываете свое мнение.creocoder писал(а): Вам уже показали, что удобство объективно уменьшится. И уменьшится оно без каких либо на то оснований.
Неконструктивный диалог это когда вы заявляете, что "Валидация должна валидировать" и не понимаете что `rules()` как список бизнес правил к процессам валидации имеет лишь крайне косвенное отношение.
Неконструктивный диалог, это когда объективное уменьшение удобства использования и геморрой на практике (извините, тупо потому, что кто то не понял что на самом деле значит "валидация должна валидировать") ничем не обоснован.
Re: разделить rules на 2 части
ок, я понял вашу позицию. Все что происходит между событиями BEFORE_VALIDATE и AFTER_VALIDATE - это не только валидация, а еще и некие бизнес-правила. Валидаторы не только валидаторы, но и фильтры, а также сущности, устанавливающие дефолтные значения. Что доки в разделе валидации описывают не только валидацию. А тема создалась (не первый раз) потому что (100% - 1) пользователей не в курсе, что происходит в методе Model::validate(). Вы победили)creocoder писал(а):Неконструктивный диалог это когда вы тащите в качестве аргументов SRP не понимая до конца что это такое и что применить это к методу `rules()`, который отдает просто список это бред сивой кобылы. Метод `rules()` с позиции SRP корректный на 100%, потому что он выполняет единственную задачу "отдать список".zelenin писал(а):это неконструктивный диалог, когда вы подменяете понятия. Показали изменения трех строчек на три строчки (71 символ на 140 символов). Объективно уменьшилось удобство? Такой манерой диалога вы навязываете свое мнение.creocoder писал(а): Вам уже показали, что удобство объективно уменьшится. И уменьшится оно без каких либо на то оснований.
Неконструктивный диалог это когда вы заявляете, что "Валидация должна валидировать" и не понимаете что `rules()` как список бизнес правил к процессам валидации имеет лишь крайне косвенное отношение.
Неконструктивный диалог, это когда объективное уменьшение удобства использования и геморрой на практике (извините, тупо потому, что кто то не понял что на самом деле значит "валидация должна валидировать") ничем не обоснован.
Re: разделить rules на 2 части
про srp я конечно ошибся, приведя в пример rules(), который отдает массив. Жаль, что вы не поняли, что имелся в виду процесс валидации в целом, а в частности Model::validate(). Это так удобно в споре играться с чужими словами.
Re: разделить rules на 2 части
все, что я перечислил нужно будет тоже менять с *validate* на *businessRulesHandle* иначе через полгода третий раз будем это обсуждать. В итоге вместо валидации, присутстсвуующей везде, мы будем применять набор бизнес правил разного вида (валидация, фильтрация, присваивание). Ок.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: разделить rules на 2 части
ОК. Почему именно behavior понятно. На 2.1 точно стоит обдумать. Beavior-ы в пользу trait-ов + even-ов, скорее всего, будем выкидывать.
Нравится Yii? Давайте сделаем его лучше!.
Re: разделить rules на 2 части
для меня рулесы, это посл действий по сценарию, правила сценария, мне пофиг че в них, валидация или какая другая логика, открыв их, я вижу что происходит по сценарию, какая последовательность, то что она запускается $model->validate или бы обрабатывалась в beforeValidate без разницы - это скрытая логика. Разделение этого на 2 части это большое ломание совместимости, т.к. надо будет переписывать scenarios метод, который бы теперь строил "карту" на основе 2х методов, особо профита тоже в этом не вижу
Re: разделить rules на 2 части
Так уже можно с AttributeBehavior замутить.zelenin писал(а):делаем еще одно поведение, куда передаем атрибуты и колбэки функций - все остается в таком же (!) виде, как и в валидации, только добавляется класс поведения.
Re: разделить rules на 2 части
я об этом писал выше.ElisDN писал(а):Так уже можно с AttributeBehavior замутить.zelenin писал(а):делаем еще одно поведение, куда передаем атрибуты и колбэки функций - все остается в таком же (!) виде, как и в валидации, только добавляется класс поведения.