На TS есть фреймворк, называется Nest. Он изначально использует модульную структуру, и там она реализована достаточно хорошо. Гляньте.
Далее как я делаю в Laravel проекте:
- /vendor - зависимости компоузера, в виде сторонних библиотек и компонентов symfony/laravel. Там есть весь базовый функционал, как, например, работа с БД. Такие зависимости в любом случае будут тесно связанны с логикой приложения, и думать об их удалении не стоит вообще. Максимум, что вы можете - построить слой абстракции над /vendor, но это ПЛОХАЯ идея.
- /app/Ship - увидел это в другом фреймворке, называется Apiato. Сам по себе он хрень, но сама идея мне понравилась. Этот "корабль" - слой твиков, временных фиксов, загрузчиков и другого, что касается каких-то базовых, недостающий частей фреймворка/библиотек, и используется всемя модулями в проекте. Например:
- загрузка модулей. Так как для laravel нету нормальной системы, пришлось написать свой костыльчик. Лежит он в ship.
- обработчик исключений
- ядра (хттп и консольное)
- твики для миграций
- общие трейты, скоупы
- миксины
- общие миддлвейры
В общем все то, что относится ко всему проекту в целому. Структура - хаотична.
Таким образом в третьем, финальном слое, у меня только чистая бизнес логика:
- /app/Containers - контейнеры - пафосное слово на замену модулям. Идея та же. В каждом контейнере, в корне, лежит класс с названием контейнера, в котором находятся такие штуки как: краткое название для авто-префикса ресурсов, список провайдеров и миграций (назовем их "штуками из фреймворка", к структуре не относятся).
Структура каждого контейнера:
- API/ - все, что касается хттп апи приложения
- Controllers/ - контроллеры хттп
- Requests/ - классы form request хттп
- Tests/ - функциональные тесты этого апи
- routes.php - файл раутов
- Broadcasting/ - все, что относится к броадкастингу через сокеты
- Events/ - сами классы эвентов
- channels.php - файл регистрации каналов броадкастинга
- Configs/ - конфиги этого конкретного контейнера (и НЕ его зависимостей)
- Extra/ - иногда бывает что-то, немного выходящее за рамки контейнера, но еще не входит в Ship. Идет сюда.
- Middlewares/ - хттп миддлвейры
- Database/ - все, что связано с базой данных
- Factories/ - файлы пхп, регистрирующие фабрики моделей ларавель
- Migrations/ - классы миграций
- Seeders/ - сидеры базы
- Setup/ - классы-фабрики, обложка над Factories
- Enums/ - энамы
- Exceptions/ - исключения
- JsonResources/ - гсон ресурсы
- Models/ - eloquent модели
- Providers/ - провадйеры
- Services/ - маленькие классы-сервисы, содержащие всю бизнес логику, не привязанные к ХТТП. Каждый сервис выполняет либо одну задачу, либо несколько мелких задач одного типа. Singleton
- Traits/ - трейты
Все, что я выше указал - либо часть самого языка (как трейты), либо часть фреймворка Laravel. Гуглите.
Есстественно, под разные фреймворки внутренняя структура каждого контейнера может и будет менятся.
PS: БД одна для всего проекта. Зачем вам разные БД, когда есть разные таблицы?)
PS2: то, что вы себе представили - называется микросервис. Выполняет какой-то небольшой набор задач, имеет отдельную базу и вообще изолирован от всего остального. Но раз вы задаете такие вопросы, вам они точно не нужны.