@santaatnas
Java, Python, Php

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

Всем здравствуйте, подскажите пожалуйста по такому вопросу. Yii2 advanced, допустим есть модель таблицы, находиться в папке frontend/models/Review.php, она описывает одноименную таблицу в бд "review" и наследуется от класса ActiveRecord, таблица содержит набор полей и нам необходимо получить, допустим, все записи по дате. Создаем метод public static function getReviewByData( $data )...который возвращает нам наши записи. Правильно ли делать модель толстой и хранить там всю логику, все методы получения и записи данных, а потом в контроллере вызывать их, либо стоит создать отдельный класс для CRUD-манипуляций и вызывать методы из него, либо вообще ( видел примеры когда создают запросы к бд во view, что считаю в корне неправильным ). И другой вопрос, где в шаблоне advanced хранить бизнес логику (свои классы), какие правильные практики существуют ( естественно чтобы была возможность автозагрузки классов стандартными средствами yii2 ). Допустим я хочу реализовать какой-либо паттерн, мне стоит хранить весь паттерн в каком либо одном namespace или разные классы и интерфейсы в разных namespace...Заранее спасибо за ответ.
  • Вопрос задан
  • 1194 просмотра
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
таблица содержит набор полей и нам необходимо получить, допустим, все записи по дате. Создаем метод public static function getReviewByData( $data )...который возвращает нам наши записи. Правильно ли делать модель толстой

Вот что по этому поводу говорят доки:
www.yiiframework.com/doc-2.0/guide-db-active-recor...
а именно советуют создавать класс ModelQuery унаследованный от ActiveQuery при этом имея класс Model унаследованный от ActiveRecord и при как правило сюда еще добавляется ModelSearch. В доках все лежит в model, но я внутри model создаю подпапки query и search.
Ответ написан
@Nc_Soft
Обычно делают контроллеры и модели тонкими, а всю лапшу городят в отдельных классах-репозиториях.
Смотрите паттерн repository
Ответ написан
qonand
@qonand
Software Engineer
Создаем метод public static function getReviewByData( $data )...который возвращает нам наши записи

Ну вообще желательно формирование запросов реализовывать в отдельном классе, наследуемом на пример от ActiveQuery

Правильно ли делать модель толстой и хранить там всю логику, все методы получения и записи данных, а потом в контроллере вызывать их

Не путайте модель в MVC и ActiveRecord в YII. ActiveRecord - просто паттерн реализующий определенный фронт работ с таблицей базы данных, модель же должна содержать бизнес-логику приложения. Соответственно если у Вас есть ActiveRecord - Review, то бизнес-логики в ней лучше не делать, а реализовывать ее отдельными классами, с которыми будет взаимодействовать контроллер

И другой вопрос, где в шаблоне advanced хранить бизнес логику (свои классы), какие правильные практики существуют ( естественно чтобы была возможность автозагрузки классов стандартными средствами yii2 ). Допустим я хочу реализовать какой-либо паттерн, мне стоит хранить весь паттерн в каком либо одном namespace или разные классы и интерфейсы в разных namespace...

Да где хотите, все зависит от архитектуры которую Вы предусматриваете в проекте. Yii не налаживает ни каких ограничений на это.
Ответ написан
Ваш ответ на вопрос

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

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