Size: a a a

2021 March 31

CB

Chiki Briki in symfony
Шурик
у тебя в любом месте приложения могут ВНЕЗАПНО возникнуть невалидные дто? или же только в тех местах, где юзеры тебе засылают свои запросики?
ничто не мешает какому-то Васяну добавить модуль, который будет собирать даные с АПИ, создавтаь из них ДТО и без валидации отправлять мне в метод
источник

Ш

Шурик in symfony
Chiki Briki
ничто не мешает какому-то Васяну добавить модуль, который будет собирать даные с АПИ, создавтаь из них ДТО и без валидации отправлять мне в метод
то есть невалидные данные появляются только там, где твоя система взаимодействует с внешним миром, да?
источник

CB

Chiki Briki in symfony
Шурик
то есть невалидные данные появляются только там, где твоя система взаимодействует с внешним миром, да?
это один из кейсов, ничто не мешает какому-то Васяну в крон команде создать невалидный ДТО и отправить мне в метод
источник

ПГ

Павел Г. in symfony
Chiki Briki
ничто не мешает какому-то Васяну добавить модуль, который будет собирать даные с АПИ, создавтаь из них ДТО и без валидации отправлять мне в метод
Ваш метод должен внутри себя такое предотвращать. Это БЛ, а если не БЛ - то это просто данные, которые впринципе и должны быть любые.
источник

Ш

Шурик in symfony
Chiki Briki
ничто не мешает какому-то Васяну добавить модуль, который будет собирать даные с АПИ, создавтаь из них ДТО и без валидации отправлять мне в метод
по такой логике - никто не мешает тому же васяну просто убрать всю валидацию на проекте
источник

ПГ

Павел Г. in symfony
Chiki Briki
это один из кейсов, ничто не мешает какому-то Васяну в крон команде создать невалидный ДТО и отправить мне в метод
Давайте лучше пример невалидного ДТО и метода
источник

ПГ

Павел Г. in symfony
Шурик
по такой логике - никто не мешает тому же васяну просто убрать всю валидацию на проекте
+
источник

CB

Chiki Briki in symfony
Шурик
по такой логике - никто не мешает тому же васяну просто убрать всю валидацию на проекте
перед тем, как что-то менять или удалять - 10 раз подумает (если уж совсем не Василий), а забыть добавить / пропустить требования - запросто
источник

Ш

Шурик in symfony
Chiki Briki
это один из кейсов, ничто не мешает какому-то Васяну в крон команде создать невалидный ДТО и отправить мне в метод
если исходить из того, что у тебя в команде работают либо враги либо долбоёбы - выхода нет вообще.
источник

Ш

Шурик in symfony
никто не помешает тому же васяну в методе do просто всё сломать кху ям.
источник

ПГ

Павел Г. in symfony
Chiki Briki
перед тем, как что-то менять или удалять - 10 раз подумает (если уж совсем не Василий), а забыть добавить / пропустить требования - запросто
Тут просто такой момент, ваша логика должна быть жесткая и без этой валидации. Просто с ней ваш метод не упадет по 500, а отдаст красивый результат.
источник

ПГ

Павел Г. in symfony
@vixtrime в целом вы правы. Но делают и так и так, прям критичного - вроде как нет.
источник

CB

Chiki Briki in symfony
Просто еще есть момент как сделать по красоте валидацию.
Например мы перегоняем массив в ДТО и при этом у нас невалидный массив, например некоторые поля не проставлены, а в конструкторе ДТО они обязательны.
По хорошему кинуть ексепшон со всеми ошибками по всем отпавшим required полям если их больше 1, но сериализатор отпадет на первом же поле и нужно будет из него брать ошибку и она будет только для одного поля.
Соответственно если это приемка данных извне, то нужно валидировать перед маппингом на ДТО для обеспечения нормального создания ДТО, а потом ДТО уже влидировать по правилам, которые требует юз кейс.
В сухом остатке получается два слоя валидации.
Шо скажемс?
источник

ПГ

Павел Г. in symfony
Chiki Briki
Просто еще есть момент как сделать по красоте валидацию.
Например мы перегоняем массив в ДТО и при этом у нас невалидный массив, например некоторые поля не проставлены, а в конструкторе ДТО они обязательны.
По хорошему кинуть ексепшон со всеми ошибками по всем отпавшим required полям если их больше 1, но сериализатор отпадет на первом же поле и нужно будет из него брать ошибку и она будет только для одного поля.
Соответственно если это приемка данных извне, то нужно валидировать перед маппингом на ДТО для обеспечения нормального создания ДТО, а потом ДТО уже влидировать по правилам, которые требует юз кейс.
В сухом остатке получается два слоя валидации.
Шо скажемс?
Несколько слоев валидации - это норм. Другое дело на сколько внутренняя валидация должна быть жесткой и дублирующей. И нужно ли оно вообще. Просто по хорошему БЛ должна быть зашита именно в самих бизнес объектах, а не где то в валидаторе и его правилах.
источник

ПГ

Павел Г. in symfony
Chiki Briki
Просто еще есть момент как сделать по красоте валидацию.
Например мы перегоняем массив в ДТО и при этом у нас невалидный массив, например некоторые поля не проставлены, а в конструкторе ДТО они обязательны.
По хорошему кинуть ексепшон со всеми ошибками по всем отпавшим required полям если их больше 1, но сериализатор отпадет на первом же поле и нужно будет из него брать ошибку и она будет только для одного поля.
Соответственно если это приемка данных извне, то нужно валидировать перед маппингом на ДТО для обеспечения нормального создания ДТО, а потом ДТО уже влидировать по правилам, которые требует юз кейс.
В сухом остатке получается два слоя валидации.
Шо скажемс?
Если же говорить о ваших же мыслях, что точка правды должна быть одна. А если она будет в валидаторе - то их будет много, так как методов может быть несколько которые работают с опредленными объектами
источник

CB

Chiki Briki in symfony
Ну первый слой валидаторов работает только для того, чтобы сами ДТО создавались и в случае чего создавалось исчерпывающее исключение, что ДТО не может быть создан, а специфические правила, как, например типа строки email ,должны проверяться уже непосредственно в службе
источник

Ш

Шурик in symfony
Chiki Briki
Ну первый слой валидаторов работает только для того, чтобы сами ДТО создавались и в случае чего создавалось исчерпывающее исключение, что ДТО не может быть создан, а специфические правила, как, например типа строки email ,должны проверяться уже непосредственно в службе
Почему Email не может быть объектом-VO, чтоб его попросту нельзя было создать невалидным?
источник

Ш

Шурик in symfony
И служба не будет париться с регулярками, а будет заниматься делами
источник

ПГ

Павел Г. in symfony
Chiki Briki
Ну первый слой валидаторов работает только для того, чтобы сами ДТО создавались и в случае чего создавалось исчерпывающее исключение, что ДТО не может быть создан, а специфические правила, как, например типа строки email ,должны проверяться уже непосредственно в службе
Короче я потерялся в тоге к чему мы пришли :) Соглашусь, что лучше сначала валидировать массив. (В симфони можно кстати формы использовать под это дело) . Далее конкретно в валидации особо смысла не вижу. Там уже должны быть бизнес правила и они все отрубят жестко.
источник

CB

Chiki Briki in symfony
Шурик
Почему Email не может быть объектом-VO, чтоб его попросту нельзя было создать невалидным?
А если у нас непосредственно перед созданием VO нужны выполнить ресурсоемкие операции? Например запрос в БД или запрос на АПИ? Мб имеет смысл валидировать input, а потом уже начинать его обрабатывать?
источник