Ребят, подскажите пожалуйста по валидации, прочитал и по чату и

блогам, но так и не пришел к единому мнению. У меня сложилась следующая картинка в голове. (Возможно ошибочная)

В моем понимании есть три уровня валидации.

- Валидация на уровне Реквеста, ( проверка что пользователь ввел почту, а не какую то херню, что поля заполнены, проверка на уникальность что не может быть двух юзеров с одинаковым емаилом)
Это в моем понимании валидация пользовательская, пользователь не прав мы об этом ему сказали путем например ответа с кодом 422 и месагой что вы ввели неверный эмаил.

- Валидация на уровне сущностей и бизнес логики. Взять того же юзера, то в конструкторе например проверить что email действительно email, а не какая то дичь. Если это дичь то бросить исключение вроде InvalidArgumentException. Если отсюда вылетел экзепшен, мы пишем его в логи. Хендлим этот экзепшен где то на выходе и отрисовываем Пользователю ответ, мол ошибка сервера, попробуйте позже. Верно ли я понимаю что эти экзепшены они для программиста? Пользователю не нужно знать о том что внутри что то пошло не так. Пользователю мы сообщаем на первом уровне.

- Третья валидация это даже не валидация, а защита от дурака на уровне связей в таблицах. Когда уже бд сообщает о том что произошел 'пробой' , на первых двух и мы пытаемся записи в бд привести в несогласованное состояние (например два пользователя в системе с одним email). Верно ли я понимаю, что такое поведение мы тоже хандлим в логи, а пользователю пишем мол ошибка сервера.

Ну и еще. Верно ли я понимаю что если пошел рассинхрон 1го уровня валидации со вторым, то собственно с логов прогеры видят где пошло что не так. И уже потом смотрят что нужно докрутить, пользовательскую валидацию или правила в БЛ. Спасибо

2 ответов

12 просмотров

Вообще как таковой первой, третьей, пятой валидации нет, есть проверка - контракта - реквест, cli аргументы, дто - здесь проверка на типы, да мейл может быть отдельным типом, может еще проверка на диапазоны и тп, но с ними спорная тема и зависит от ситуации. Дальше уже проверка инвариантов - в твоем случае - не может быть двух пользователей с одинаковой почтой, или мейл уже заблочен или был уже использован или еще что-то - и это уже уровень бизнес логики и здесь как раз пользователю нужно сообщать что он делает что-то не то. На счет бд, я бы сказал не защита от дурака, а механизм сохранения целостности данных.

на счет исключений в проверке инвариантов и бизнес логике https://reflectoring.io/business-exceptions/

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
2
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
у кого сколько оперативы на базе данных ?
АДИЛЬБЕК
4
Через бот апи возможно получить ID стикерпака? Не ссылку.
Vexylon [АФК до 09.09]
5
Привет Хочу сделать аналог iCloud’а для своих проектов, чтобы пользовательская информация хранилась в облаке, была доступна во всех сервисах, её можно было подсасывать везде)...
Виталий
9
В тг можно спарсить всех кто пишет в группе? Если список участников скрыт
S
3
код Event::listen('cms.page.display', function (&$content, $slug, $page, $html) { if (is_object($content)) { dump($content); } else { dump($s...
Point 111
3
Доброе утро, мультиязычные сайты делал кто-нибудь? Какие подводные камни? Нужно чего нибудь допом ставить? Как поступить? В теории сделать две папки ru en и туда кидать страни...
Racoon Mitya
2
Карта сайта