Где правильнее размещать логику и работу с базой данных согласно mvc?

Сейчас изучаю фреймворк yii2 и паралельно пишу сайт. У меня вся логика работы и операции с БД находяться в модели. Контроллер же только запрашивает эту информацию у модели и делегирует ей обработку(включая логику). Правильно ли согласно MVC я делаю? Или же в модели должны быть только правила валидации и операции CRUD без какой либо логики?
  • Вопрос задан
  • 454 просмотра
Пригласить эксперта
Ответы на вопрос 2
mitaichik
@mitaichik
По хорошему, в модели должна быть только логика сущности. Валидация - в какой-то мере логика сущности. Паттерн ActiveRecord добавляет туда еще и работу с БД. Это удобно для относительно простых проектов, но если у вас сложная работа с БД то класс модели распухнет. Поэтому имеет смысл выносить логику БД из класса модели в соответствующие объекты. Например, репозитории. Еще отличным примером выноса логики работы с БД - это создание для класса своего ActiveQuery с своими скоупами. Бизнес\Операционную логику - в соответствующие сервисы. Логику валидации - в свои валидаторы. Ну и т.п.
Ответ написан
Комментировать
@sscrm
web разработчик
Всё правильно, бизнес логика должна находиться в моделях. Не знаю как в yii, но в symfony модели разделены на сущности и репозитории, и в репозиториях размещается вся бизнес логика. Есть такой антипаттерн "толстый контроллер", это когда бизнес логику пытаются впихнуть в контроллер, не надо так делать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы