The Ant
Я не увидел слова Validator в классе
Есть мнение, называть классы тем, что они делают. Суффиксы ор, ер типа моветон. Слышал про такое? Теперь посмотри на папочку, в которой это лежит. Стало понятней?
Павел
Опять таки, в его названии глагол, а хорошее название класса - существительное
The Ant
Т.е. если я увижу твой класс в коде, мне понять что он делает, надо найти его папку? ЛолШто...
А если он называется просто валидатор понятно что именно он делает?
The Ant
Допустим, если там 2+ реализации внутри.
Павел
А если он называется просто валидатор понятно что именно он делает?
А что мне надо от класса, который просто валидатор) Валидатор и есть валидатор ))
Павел
Допустим, если там 2+ реализации внутри.
Врядли твоему коду вообще нужно две реализации, скорее всего должен быть интерйес и 2 реализации
Павел
Опять таки : AnnotationValidator OtherFrameWorkValidator AttributeValidator
The Ant
Если я так сделал, значит нужно. Не?
Павел
Если я так сделал, значит нужно. Не?
Возможно, ок, ладно, закончим. Но честно выглядит гавном ) Могу быть и не прав)
The Ant
Так. я заебался оправдываться. Вот тебе задача. Надо валидировать дто. В некоторых случаях надо ошибки отдавать с группировкой по полям, в некоторых просто список ошибок текстом. Предлагай реализацию
Пилот
Тут тоже есть валидация)
Тут из FromRequest заполняется Command? Не юзал атрибуты, там можно так дтошки/команды заполнять?
Konstantin
Опять таки, в его названии глагол, а хорошее название класса - существительное
а это когда успело появиться? 🙂 я не то чтобы за игрульками дддшными сильно слежу, но так краем глаза поглядываю иногда. такого вот не помню
Павел
Тут из FromRequest заполняется Command? Не юзал атрибуты, там можно так дтошки/команды заполнять?
Да, примерно так. Но это можно и без атрибутов, через интерфейс единый для DTO. Интерфейс чисто для заполнения из http
Пилот
И юзать типа как кастомные laravel-like FooBarRequest инжектируемые через argumentresolver в контроллер с эксепшеном если реквест не провалидировался?
The Ant
Опять таки, в его названии глагол, а хорошее название класса - существительное
Бла-бла-бла. На эту тему срутся вечно. Похуц. Давай лучше по реализации
Павел
Зачем тебе вообще 2 отображения ошибок?
Пилот
а это когда успело появиться? 🙂 я не то чтобы за игрульками дддшными сильно слежу, но так краем глаза поглядываю иногда. такого вот не помню
Про существительные тоже слышал) но немного рвет пукан Manager -or/-er окончания. Например UseCase/FooHandler))
Пилот
Но это мелочь
The Ant
Мое решение было ранее, отображение вообще не касается валидатора
Таскать ещё одну зависимость в конструктор для отображенияв нужном виде?
Павел
Классы - не глаголы
Konstantin
не глаголы, да, но worker - это не глагол
Konstantin
это вполне себе существительное
Пилот
Ну да, методы глаголы у идеале. Но фактор методы fromFoo, fromBar тоже ведь не глаголы) хотя тут просто упускается createFromFoo/createFromBar
Konstantin
то есть почему -or/-er плохо-то?
Павел
то есть почему -or/-er плохо-то?
Это не ко мне, я такого не говорил
The Ant
Классы - не глаголы
Не истина в последней инстанции. Когда навешаешь на 1 ивент штук 20 хендлеров, потом будешь рассказывать как называть
Konstantin
сорян тогда, сплю уже одним глазом
Пилот
Don't Create Objects That End With -ER https://www.yegor256.com/2015/03/09/objects-end-with-er.html
Пилот
А ля такого плана есть мнения)
Konstantin
ахаха бугаенко нет, пожалуйста
Пилот
Дада) но в целом дискашенв есть и на других ресурсах вроде типа реддита и стака, но хз) за шо купил, так сказать, за то и продаю))
The Ant
Эм, не вижу проблемы. П.С, думаю над твоей задачей
Увидишь. Потому что в названии надо описывать то, что делает этот хендлер. Иначе ебанешься понимать что там внутри.
Konstantin
этот чувак - клоун, который несет ахинею ради репостов, в серьезном обществе этого дурачка упоминать - моветон. я то есть без капли личной неприязни, просто у чувака такой образ, что он несет прям ахинею, как в передаче малахова, лишь бы все почаще крутили у виска при его упоминании
The Ant
А потом и остальное начнёшь называть на понятном языке, а не набором слов
Павел
@theantt Если брать конкретно симфони, можно сделать два ErrorResponse (название придумай) и в них класть ошибки и по разному нормализовать. Т.е. это как раз view класс.
Павел
Но и если без симфони, надо разделять валидацию и отоюражение. Да и через di тащить не обязательно
Konstantin
да нормального у него названо, это два хелпера, которые один формат массива кладут в другой, как блин их ещё называть-то
The Ant
Это два валидатора с разным выводом
Нет, это два декоратора с разным выводом, внутри симфонический валидатор ))
Павел
Дай ка угадаю, хелпер на статических методах?
Нет, $this->json(new OneTypeValidationErrorResponse($validationErrors)): $this->json(new SecondTypeValidationErrorResponse($validationErrors)):
Павел
Нет, это два декоратора с разным выводом, внутри симфонический валидатор ))
Ну тогда и назови их по человечески)) они даже не похожи на декраторы или на view некий
Павел
Как мне в тот онетипвалидайшен прокинуть валидатор?
Никак, из вадитора возвращаеются ошибки, вот эти ошибки.
Павел
Как?
Что они должны возвратить? Без внутренней реализации
Павел
Т.е. мне типов респонсов наложить?
Ну это типо view, template. Только в виде класса
The Ant
Что они должны возвратить? Без внутренней реализации
Ошибки конечно же, в разных вариантах
The Ant
Выше уже написано же
The Ant
Раз пять написал, а ты не читаешь )
Павел
В некоторых случаях надо ошибки отдавать с группировкой по полям, в некоторых просто список ошибок текстом. Ок ща
The Ant
Тут тоже есть валидация)
Где у тебя тут валидация и ответ с ошибками? В аргумент ресолвер поди засунул?
Павел
Ну смотри, это не может быть декоратор, так как ты возвращаешь разные типы. Например валидатор возвращает некий результат (массив или класс) и его надо преобразовать в разные виды. Это ближе к паттеру мост, что как раз в MVC, есть данные, а есть View. Т.е. я или бы предложил как выше, сделать несколько классов ErrorResponse, Например StringValidateResponse, ArrayValidateResponse, (Можешь назвать по другому) и их создавать в контроллерах. Они оба принимают ошибки валидатора, а не сам валидтор. Или же Сделать какие то Трансформеры, как ты это и делал. Но как ты и сказал, 2 класса в DI для валидатора - не очень. Короче главное - это название нихера не понятное. Ну и не декоратор.
Павел
Где у тебя тут валидация и ответ с ошибками? В аргумент ресолвер поди засунул?
Верно, ответ может намутить разный с разными резолверами, если уж прям захочется
Кирилл
Тут тоже есть валидация)
А можно вопрос. В чем суть этого?
Konstantin
автору кажется что это круто выглядит 🙂
Павел
А можно вопрос. В чем суть этого?
В том, что можно убрать болерплейт с валидацией и формированием ошибок из контроллера
Павел
The Ant
Верно, ответ может намутить разный с разными резолверами, если уж прям захочется
Задача ресолвера отресолвить аргумент, а не отвалидировать до кучи и обработать ошибки ещё. Бля, топите за солиды, и вот этой хернёй занимаетесь
Павел
Задача ресолвера отресолвить аргумент, а не отвалидировать до кучи и обработать ошибки ещё. Бля, топите за солиды, и вот этой хернёй занимаетесь
Резолвер не обрабатывает ошибки, он обрабатывает первичную валидацию. Вот одна ответственность
Павел
Не понимать. Что ты возвращаешь хотя бы?
Ничего, данный метод не требует ответа с данными
Пилот
Не понимать. Что ты возвращаешь хотя бы?
Он command заполняет как я понял
Пилот
По аналогии как устроено в ларавел
Пилот
Правда там нет заполнения команд)
Павел
Правда там нет заполнения команд)
Почему, там же реквест заполнен массивом и отвалидирован правилами. Очень похоже да, но в ларавеле есть базовый класс привязанный к http