Страницы

Поиск по вопросам

вторник, 12 февраля 2019 г.

Вопрос про модель в MVC

Здравствуйте, я смотрел, как делают два разных человека сайт и так и не понял, откуда брать данные из БД в модели или контроллере? ну, т.е. в модели мы пишем табл из который будет выборка, это понятно.
Один человек делал так: в модели название табл и все. А выборку он делал уже в контроллере, например:
$feeds = Feedback::find()->orderBy('RAND()')->limit(4)->all();
А другой выборку делал в модели, а в контроллере уже обращался к методу того класса, пример:
$categories = Category::getCategoriesList();
Как правильно или как лучше и что лучше всего делать в модели?)))


Ответ

Для примера возьмем ваш пример. Выводим $feeds = Feedback::find()->orderBy('RAND()')->limit(4)->all(); в контроллере и все работает. Завтра нужно тоже самое, но в другом контроллере (или методе)? Что тогда? Вот если мы создадим метод в модели, то сможем использовать все это и в других контроллерах.
public function getFeeds() { return self::find()->orderBy('RAND()')->limit(4)->all(); }
Тут даже дело уже не в самом MVC, а в подходе к гибкости системы. Старайтесь всегда думать о том, что вдруг данный код понадобиться где-то ещё.
Я использую помимо моделей (Models) ещё и модели представления (ViewModels). Это очень удобно. Например есть модель Users
class Users extends ActiveRecord {
public static function tableName() { return 'users'; }
//Behaviors... //Roles... //Relations
}
В данной модели я храню все методы, касаемо самого Yii (правила,связи, поведения и т.д.). Не засоряю данный класс. Для остальных же методов использую UsersViewModel
class UsersViewModel extends Users {
public static function getAllUsers() { return Users::find()->all(); }
}
Я привел для примера примитивный пример, но важна сама суть. Старайтесь всегда думать на шаг вперед, чтобы потом не возвращаться на 2 шага назад.
Лучшие практики MVC. На примере Yii

Комментариев нет:

Отправить комментарий