small_jedi
@small_jedi

Смысл модулей в Yii2?

Здравствуйте. Знатоки yii2 подскажите пожалуйста в чем смысл модулей в фреймворке? Понятное дело, что в документации написано, что это нечто изолированное, что может использоваться самостоятельно в другом месте.
У меня распутица перед выбором. Где лучше хранить модули в common папке или в текущем разделе backend или frontend, если собирать сайт на модулях. Обычно собираю на контроллерах, где url имеет вид controller/action. Но хочется начать правильно собирать. Какая выгода использования модулей?
  • Вопрос задан
  • 631 просмотр
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Как написано в документации:
Модули - это законченные программные блоки, состоящие из моделей, представлений, контроллеров и других вспомогательных компонентов. При установке модулей в приложение, конечный пользователь получает доступ к их контроллерам. По этой причине модули часто рассматриваются как миниатюрные приложения. В отличии от приложений, модули нельзя развертывать отдельно. Модули должны находиться внутри приложений.


Исходя из определения Модули (микросервисы) существуют для изоляции разных частей сайта друг от друга. Благодаря слабой связанности и сопряженности Модуля, можно менять одну часть сайта на другую без поломок других. При этом нужно учитывать, что база данных таких модулей тоже должна быть независима, а общаются такие модули между друг другом через API или события приложения, когда модули на одном сервере.

При поломке одного модуля — не ломается все приложение. На эту тему можно прочитать статью Как проектировать табуретку?. Когда-то отвечал на подобную тему на Toster.

Архитектуру Модулей в приложении вы можете придумать сами. Главное, чтобы доменный слой был независимым. Под модули можете сделать отдельную корневую папку с названием модуля:
- Backend
- Frontend
- Shop
- Blog

Или же сгруппировать:
- Backend
- Frontend
- Modules
- Modules/Shop
- Modules/Blog

Контроллеры и вид при этом будут просто разделены по папкам модулей:
- Backend/Controller/Shop
- Backend/Controller/Blog
- Frontend/Controller/Shop
- Frontend/Controller/Blog

Например,
так или так. Разделение в Models делите все по папкам модулей:
Model/Shop
Model/Blog

Подведя итог:
1. Модуль служит для изоляции отдельных частей приложения на разные детали. При поломке двигателя не сломается шасси. Шасси можно поменять на шасси от другого авто, при этом двигателю всё равно на каком шасси автомобиль.
2. Модуль можно переиспользовать в других проектах или выложить в отдельный репозиторий и подключать в composer.
3. Хорошо структурированный, читаемый и понятный код. Сопровождаемость.
4. Тестируемость
5. Горизонтальное масштабирование.
и др.

Разделение модулей происходит по папкам следуя стандартам PSR7.

Полезные статьи на схожую тему:
1. https://toster.ru/q/659155
2. Мой вопрос на форуме
3. Организация независимых модулей на Yii2
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanes
@Sanes
Ну все правильно ты понимаешь. Модуль, что-то самостоятельное. Возможно с зависимостями. Обычно используется для упорядочивания кодовой базы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы