Программирование, веб-кодинг, Советы и принципы

Какой должна быть MVC-структура в Yii2. Лучшие практические методики разработки в MVC

Какой должна быть MVC-структура в Yii2. Лучшие практические методики разработки в MVC

В Yii отлично культивируется MVC подход к разработке. Выделяются 3 структуры: модели, виды, контроллеры. Каждая такая структура берёт на себя определённые задачи в функционировании приложения. Такое разделение кода вносит ясность и понимание при работе с кодом, позволяет избежать каши и повторов в php-функциях, повышает защиту, да и просто предоставляет приятную рабочую среду для программиста.


Советы для контрОллеров

контроллеры в Yii (не контролёры)

В хорошо организованных приложениях контроллеры обычно очень тонкие и содержат лишь несколько строк кода. Если ваш контроллер слишком сложный, то обычно это означает, что вам надо провести его рефакторинг и перенести часть кода в другие места.

В целом, контроллеры

  • могут иметь доступ к данным запроса;
  • могут вызывать методы моделей и других компонентов системы с данными запроса;
  • могут использовать представления для формирования ответа;
  • не должны заниматься обработкой данных, это должно происходить в слое моделей;
  • должны избегать использования HTML или другой разметки, лучше это делать в представлениях.


Советы для моделей

модели в yii

Модели являются центральным местом представления бизнес-данных, правил и логики. Они часто повторно используются в разных местах. В хорошо спроектированном приложении, модели, как правило, намного больше, чем контроллеры.

В целом, модели

  • могут содержать атрибуты для представления бизнес-данных;
  • могут содержать правила проверки для обеспечения целостности и достоверности данных;
  • могут содержать методы с реализацией бизнес-логики;
  • не следует напрямую задавать запрос на доступ, либо сессии, либо любые другие данные об окружающей среде. Эти данные должны быть введены контроллерами в модели;
  • следует избегать встраивания HTML или другого отображаемого кода - это лучше делать в видах;
  • избегайте слишком большого количества сценариев в одной модели.

Рекомендации выше обычно учитываются при разработке больших сложных систем. В таких системах, модели могут быть очень большими, в связи с тем, что они используются во многих местах и поэтому могут содержать множество наборов правил и бизнес-логики. Это часто заканчивается кошмаром при поддержании кода модели, поскольку одним касанием кода можно повлиять на несколько разных мест. Чтобы сделать код модели более легким в обслуживании, Вы можете предпринять следующую стратегию:

  • Определить набор базовых классов моделей, которые являются общими для разных приложений или модулей. Эти классы моделей должны содержать минимальный набор правил и логики, которые являются общими среди всех используемых приложений или модулей.
  • В каждом приложении или модуле в котором используется модель, определить конкретный класс модели (или классы моделей), отходящий от соответствующего базового класса модели. Конкретный класс модели должен содержать правила и логику, которые являются специфическими для данного приложения или модуля.

Например, в шаблоне приложения advanced, Вы можете определить базовый класс модели common\models\Post. Тогда для frontend приложения, Вы определяете и используете конкретный класс модели frontend\models\Post, который расширяется от common\models\Post. И аналогичным образом для backend приложения, Вы определяете backend\models\Post. С помощью такой стратегии, можно быть уверенным, что код в frontend\models\Post используется только для конкретного frontend приложения, и если делаются любые изменения в нём, то не нужно беспокоиться, что изменения могут сломать backend приложение.


Полезные советы для видов

виды в yii

Виды отвечают за представление данных моделей в формате, понятным конечным пользователям. В целом, виды

  • должны в основном содержать код, отвечающий за представление, такой как HTML и простой PHP для обхода, форматирования и рендеринга данных.
  • не должны содержать кода, который производит запросы к БД. Такими запросами должны заниматься модели.
  • должны избегать прямого обращения к данным запроса, таким как $_GET, $_POST. Разбором запроса должны заниматься контроллеры. Если данные запросов нужны для построения вида, они должны явно передаваться в вид контроллерами.
  • могут читать свойства моделей, но не должны их изменять.

Чтобы сделать виды более управляемыми, избегайте создания видов, которые содержат слишком сложную логику или большое количество кода. Используйте следующие подходы для их упрощения:

  • используйте шаблоны для отображения основных секций разметки сайта (верхняя часть (хедер), нижняя часть (футер) и т.п.)
  • разбивайте сложный вид на несколько видов попроще. Меньшие виды можно рендерить и объединять в больший используя методы рендеринга, описанные в документации по Yii2 для видов.
  • создавайте и используйте виджеты как строительный материал для видов.
  • создавайте и используйте классы-хелперы для изменения и форматирования данных в видах.

Держим эти советы в голове и нарабатываем опыт построения правильно организованных приложений на Yii.

По мотивам – https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/structure-controllers.md