Контроллеры должны контролировать. Всегда всё? Язык не важен, в моём случае это 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, и "рыгнуться". Но все пишут, что контроллеры должны проверять входные данные!
В PHP с динамической типизацией и без явной инкапсуляции данных модель должна быть ответственной за проверку входных данных и их валидацию перед сохранением в базу данных.
В первом примере с моделью пользователей, модель UserModel должна включать в себя проверку на валидность email и пароля до сохранения данных в БД. То есть, проверка на длину пароля и его сложность должна осуществляться в модели.
Во втором примере с заказом в магазине, модель Order также должна проверять обязательное поле name на наличие данных перед сохранением.
В третьем примере с ценой товара, модель Order должна проверять тип данных для поля price, чтобы убедиться, что передается число.
Все эти проверки и валидации должны осуществляться внутри модели, так как модель лучше всего знает о своей структуре и требованиях к данным. Контроллеры в свою очередь могут передавать данные в модель и обрабатывать исключения, которые могут возникнуть в результате неправильных данных. Таким образом, модель и контроллеры должны взаимодействовать совместно для обеспечения корректной работы приложения.
В PHP с динамической типизацией и без явной инкапсуляции данных модель должна быть ответственной за проверку входных данных и их валидацию перед сохранением в базу данных.
В первом примере с моделью пользователей, модель UserModel должна включать в себя проверку на валидность email и пароля до сохранения данных в БД. То есть, проверка на длину пароля и его сложность должна осуществляться в модели.
Во втором примере с заказом в магазине, модель Order также должна проверять обязательное поле name на наличие данных перед сохранением.
В третьем примере с ценой товара, модель Order должна проверять тип данных для поля price, чтобы убедиться, что передается число.
Все эти проверки и валидации должны осуществляться внутри модели, так как модель лучше всего знает о своей структуре и требованиях к данным. Контроллеры в свою очередь могут передавать данные в модель и обрабатывать исключения, которые могут возникнуть в результате неправильных данных. Таким образом, модель и контроллеры должны взаимодействовать совместно для обеспечения корректной работы приложения.