Контроллеры должны контролировать. Всегда всё? Язык не важен, в моём случае это PHP!!!
Делаю всё без инкапсуляции!
Пусть есть некоторая модель, которая взаимодействует с БД (save сохраняет в БД).$user = new UserModel();
$user->email = 'vasya@mail.ru'; // email - верный
$user->password = '123'; // пароль - неверный, меньше 6-ти символов
$user->save(); // должна ли быть тут ошибка (wrong password)?
Должна?
Или мы в этом же месте должны проверять мейл и пароль на валидность.Где это должно проверяться?Второй пример:
Пусть есть некоторый товар в магазине, у которого обязательно должно быть название, а остальные поля (цена, описание) могут отсутствовать.$order = new Order();
$order->save(); // ошибка, $order->name = null - по умолчанию;
Должна ли модель бросать исключение в этом случае? Или мы должны проверять перед сохранением?Где это должно проверяться?И последний:
Пусть поле price (цена) должно быть числом, а мы ставим строку (например)$order = new Order();
$order->name = 'example order';
$order->price = 'error here!'; // не число!
Я вырос на "жёстко" типизированных языках (C#, Java), где мы вообще не сможем такое провернуть, но если это ЯП с динамической типизацией?
Просто модель точно знает про столбцы, какие из них Nullable, и "рыгнуться". Но все пишут, что контроллеры должны проверять входные данные!

21 Авг 2019 в 07:07
162 +1
0
Ответы
1

В PHP с динамической типизацией и без явной инкапсуляции данных модель должна быть ответственной за проверку входных данных и их валидацию перед сохранением в базу данных.

В первом примере с моделью пользователей, модель UserModel должна включать в себя проверку на валидность email и пароля до сохранения данных в БД. То есть, проверка на длину пароля и его сложность должна осуществляться в модели.

Во втором примере с заказом в магазине, модель Order также должна проверять обязательное поле name на наличие данных перед сохранением.

В третьем примере с ценой товара, модель Order должна проверять тип данных для поля price, чтобы убедиться, что передается число.

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

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир