Dominus писал(а): ↑2019.04.26, 21:41
Brainfuck писал(а): ↑2019.04.24, 11:14
P.S. Кстати, абсолютно не понимаю в чем смысл делать отдельную модель для поиска? Можно же этот метод добавить в основную модель которая из базы достается.
Котлеты отдельно, мухи отдельно)
Основная модель
Поисковая модель
Разработчики Yii2 изначально и сознательно заложили в то, что обычно называют моделью (в Yii2) слишком много всего. Какие там принципы SOLID!
Модель в Yii2 может всё, и даже чуточку больше. В сложном проекте это приводит к тому, что модель становится божественной. Многие сотни строк кода, своя логика в beforeSave (), afterSave(), beforeDelete() ... + несколько сценариев. Все это между собой переплетено, и чтобы что-то пофиксить, или изменить, или добавить ты тратишь огромную кучу времени и нервов, даже если ты это делал сам.
Профит только в одном - можно по быстрому сделать-развернуть приложение. С помощью gii накидал модели, круды - все работает, все вроде замечательно.
Но потом тебя просят связать вот ту @евинку с этой фиговинкой, и чтобы, в рез-те, получился серо-буро-малиновый конь в крапинку. И я не утрирую. Зачастую бизнес логика, которую требуется реализовать, именно так и выглядит.
И если все делать как мы накидали в прототипе, однажды мы поймем, что мы попали в ад. Мы боимся что-то менять, потому что у нас все в одной куче, все зависит от всего. Подробности тут:
https://habr.com/ru/post/273615/
Если проект простой, в нем нет какой-то замороченной бизнес логики, то все пофиг. Но за простые проекты деньги не платят, увы. Они нужны чисто для собственного развития.
Если ты придешь в бизнес, продавать свои навыки разработчика, то логика будет огого. И тут возможны, варианты:
1. Наговнокодил и ушел
2. Сделал более-менее нормально и не ушел, нормально работаешь с приложением, развиваешь его, тебе не стыдно передать приложение в др. руки.
Я попал на первый вариант, когда предшественник не думал об архитектуре вообще, контроллеры по тысяче строк, супербожественные модели, копипаст где можно и где нельзя. Ребят, я порой ловлю себя, на кровожадных мыслях: я хочу найти этого разраба и долго бить его головой ап стену, чтобы он больше никогда так не делал.
И все начинается именно с таких, или похожих, мыслей: а зачем нужна отдельная модель для поиска, если все можно прописать в объекте AR, который работает с БД.
А попробуйте написать приложение так, чтобы объекты AR работали только с БД. Объекты для поиска данных отвечали только за поиск. Контроллер был бы именно контроллером: он должен быть очень тонким - принял запрос, отдал его модели, кинул ответ в вьюху. Модель - это не отдельный какой-то класс, а несколько классов (слой), в которых прописана вся бизнес логика, объект формы - это именно объект для работы с конкретной формой, а не объект AR etc ...
Все примеры есть в сети.
И вот когда вы все разнесете всё по своим местам, вам же самому будет намного легче поддерживать свой проект, и вы сможете спать спокойно, не боясь что вас будут бить головой ап стену