Задать вопрос

Где правильнее использовать ActiveRecord, в контроллере или модели?

Добрый вечер. Подскажите пожалуйста, где правильнее будет использовать ActiveRecord (Yii framework): прямо в контроллере или в контроллере использовать модель, которая будет оперировать объектом ActiveRecord?
Второй вариант позволит использовать один и тот же метод в разных частях модуля, но нужно будет писать метод-велосипед для получения данных.
  • Вопрос задан
  • 2617 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
korovnikiss
@korovnikiss
Frontend
В модели.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
модель - данные, которыми оперирует ваша бизнес-логика.

контроллер - нечто обрабатывающее пользовательский ввод

толстые контроллеры - когда вся логика заключена в контроллерах

тонкие контроллеры - когда вся логика выносится в сервисный слой, оставляя контроллеру только контроль за тем что отдавать, а все данные обрабатываются в сервисах. То есть в этом случае контроллер не работает напрямую с моделями и active record.

сервисы - просто какие-то классы инкапсулирующие в себя какую-то работу.

Принцип единой ответственности - класс должен делать что-то одно и хорошо. Если у вас один и тот же класс отвечает за две разные вещи (валидация и сохранение данных в базе) - это нарушение этого принципа.

active record - один из шаблонов работы с базой данных который нарушает принцип единой ответственности и еще кучи других в угоду быстрой разработки. В контексте языков типа ruby или python вреда от этого не сильно много, так как все динамичненько и не скручено в кашу. Но в php, java (с партиал классами возможно и не так уж все и плохо) и т.д. почти все реализации ужасны. Но люди мирятся с этим в угоду быстрой разработке.

Вывод, правильнее будет использовать active record в сервисах, так как при active record у вас перемешаны сервисы валидации, хранения данных и сама модель. Контроллеры же должны оперировать только сервисами.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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