Как написано в документации:
Модули - это законченные программные блоки, состоящие из моделей, представлений, контроллеров и других вспомогательных компонентов. При установке модулей в приложение, конечный пользователь получает доступ к их контроллерам. По этой причине модули часто рассматриваются как миниатюрные приложения. В отличии от приложений, модули нельзя развертывать отдельно. Модули должны находиться внутри приложений.
Исходя из определения
Модули (микросервисы) существуют
для изоляции разных частей сайта друг от друга. Благодаря слабой связанности и сопряженности
Модуля, можно менять одну часть сайта на другую
без поломок других. При этом нужно учитывать, что база данных таких модулей тоже должна быть независима, а общаются такие модули между друг другом через
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