Какими должны обязанности у модели? Встречал много разных мнений по этому поводу. Например, такие:
1) Модель должна быть толстой и содержать в себе всю бизнес-логику: поля, валидация, запросы к базе, геттеры, сеттеры и так далее.
2) Модель должна быть тонкой, валидация выносится в отдельные классы, запросы выносятся в сервисы и репозитории.
Что во втором случае должна содержать в себе модель? Только геттеры и сеттеры, какую-то информацию о полях? Если используются сервисы и репозитории, имеет ли право контроллер обращаться напрямую к ORM-модели для выполнения каких-то простых запросов? Или он всегда должен обращаться к ней строго через дополнительный слой в виде сервисов и репозиториев?
PHP
MVC-архитектура на PHP. Laravel и не только
Современный подход состоит в том, что модель должна содержать ТОЛЬКО бизнес-логику. Модель НЕ должна ничего знать о том, как и где хранятся данные.
Модель вообще не знает, что такое "база данных" и работает только с объектным представлением данных. Трансляцию же данных между объектным представлением и физическим хранилищем должен реализовывать отдельный слой доступа к данным.
Это легко реализовать в Data Mapper (Doctrine, Cycle ORM), но сложно в Active Record (большинство PHP'шных ORM). Проблема AR в том, что в нём смешиваются в одну кучу слой работы с физическим хранилищем и слой модели.
Да, AR удобно использовать в быстрой разработке, но при этом объектная структура данных приколачивается гвоздями к структуре таблиц в базе данных. И это сильно усложняет жизнь при необходимости поменять структуру данных или структуру таблиц.
Советую прочитать серию из 5 уроков https://elisdn.ru/blog/104/domain-entities-modelling (в конце каждой статьи ссылка на следующую): там подробно разбирается, и как создавать объектную модель и бизнес логику, и как делать отдельный слой доступа к данным - в том числе и при использовании AR.
Модель вообще не знает, что такое "база данных" и работает только с объектным представлением данных. Трансляцию же данных между объектным представлением и физическим хранилищем должен реализовывать отдельный слой доступа к данным.
Это легко реализовать в Data Mapper (Doctrine, Cycle ORM), но сложно в Active Record (большинство PHP'шных ORM). Проблема AR в том, что в нём смешиваются в одну кучу слой работы с физическим хранилищем и слой модели.
Да, AR удобно использовать в быстрой разработке, но при этом объектная структура данных приколачивается гвоздями к структуре таблиц в базе данных. И это сильно усложняет жизнь при необходимости поменять структуру данных или структуру таблиц.
Советую прочитать серию из 5 уроков https://elisdn.ru/blog/104/domain-entities-modelling (в конце каждой статьи ссылка на следующую): там подробно разбирается, и как создавать объектную модель и бизнес логику, и как делать отдельный слой доступа к данным - в том числе и при использовании AR.
Модель должна содержать в себе все то, что не содержит Controller и View.
Я как раз сейчас пишу MVC на php с нуля, у меня модель принимает параметры, запрошенные пользователем, от контроллера, общается с базой через отдельный класс DB и подготавливает структуры, которые затем передает во View.
Я как раз сейчас пишу MVC на php с нуля, у меня модель принимает параметры, запрошенные пользователем, от контроллера, общается с базой через отдельный класс DB и подготавливает структуры, которые затем передает во View.
MVC архитектура практически не встречается в современных фреймворках в чистом виде, т.к. они стараются охватить очень широкий круг задач. Некоторые задачи (в том числе и работа с БД) очень сложно вписать в эту архитектуру. Поэтому и появляются целые структуры из контроллеров, различные слои моделей и активные (с логикой) представлениия...
Похожие вопросы
- Создайте простой пример для реализации MVC-архитектуры на РНР для веб-приложений, включающий список пользователей.
- MVC, .php / .tpl ...как должен выглядеть файл с расширением tpl?
- PHP Polling ChatGPT
- Как оптимизировать структуру сайта php. на готовом шаблоне
- Не работает PHP include на хостинге
- Зачем программисту фреймворк (Laravel или YII)?
- Хеширование пароля php
- Подскажите хороший курс по PHP практике?
- Пишу авторизацию (php). Куки не работают
- Вопрос начинающего программиста Python\PHP