Задать вопрос

Какой подход для валидатора правильней?

Встречаю два разных типа валидации данных: первый - это, как в Yii2: возвращается булев тип и массив с текстом ошибок. Второй вариант это возвращаем void, а если ошибка, то кидаем эксепшен.
Как все же правильнее делать? Я и так и так пробовал, и в общем-то пока что не сложилось какого-то мнения что удобней и архитектурно правильно :( Может еще какие-то варианты есть? Мне чисто для самообразования :)
Если не понятно описал, пример накидал: https://php-fiddle.com/5ea29ecd05d31/2
  • Вопрос задан
  • 157 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 2
Vamp
@Vamp
Архитектурно правильнее возвращать как в примере с Yii2. Использование исключений для управления потоком выполнения программы считается серьёзным антипаттерном.

Например:
1. Исключения в данном случае - просто более хитрая замена оператору GOTO. Надеюсь, не нужно объяснять почему GOTO тоже считается антипаттерном?
2. Программы, написанные в таком стиле, становится сложно читать и понимать.
3. Меньшая эффективность в рантайме, так как большинство современных компиляторов не оптимизированы для случаев использования исключений в качестве управляющей логики.

Более подробно по ссылке.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Мне не равится ни тот ни другой подход.

Исключение при валидации - это оксюморон.
Исключение кидается кода функция не может выполнить свою работу. Проифнормировать о невалидности данных - это как раз функция функции валидации. Где тут исключительная ситуация?
Вот для функции, скажем, сохранения данных, невалидные данные - это абсолютно законный повод кинуть исключение. Но для функции валидации - ни в коем случае.
Функция проверки уникальности введенного логина не должна кидать исключение, если логин не уникальный.
Исключение она должна кидать если БД недоступна.

Но передача значения в параметр по ссылке - это как бы тоже адов кстыль, такая же архитектурная затычка, как global.
Я бы архитектурно использовал первый подход, но добавил метод для получения текста ошибок.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽