Контроллеры должны контролировать. Всегда всё? Язык не важен, в моём случае это 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
195 +1
0
Ответы
1

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

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

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

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

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

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир