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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    модель - данные, которыми оперирует ваша бизнес-логика.

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

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

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

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

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

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

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