Тебе не нужно дробить приложение на 20 репозиториев и 15 сервисов, чтобы получить модульность.
Это можно спокойно реализовать внутри грамотно спроектированного модульного монолита.
1. Разделяй модули по функциональным доменам.
Пример: пользователи, платежи, уведомления, отчёты.
Каждый модуль — это свой пакет со своими сущностями, сервисами и бизнес-логикой.
2. Определи чёткие интерфейсы между модулями.
Один модуль не должен знать внутренние классы другого.
Общай их через интерфейсы или внутренние события (например, Spring Events).
Так сохраняется слабое связывание и высокая связность.
3. Избегай циклических зависимостей.
Если модуль A зависит от B, убедись, что B никогда не зависит от A.
Разрывай такие циклы с помощью интерфейсов, dependency injection или событий.
4. Придерживайся принципа внутренних слоёв.
В каждом модуле разделяй внутренние части (entities, repositories, services) и то, что наружу (controllers, DTO, API).
5. Рассмотри использование Spring Modulith (для Java/Kotlin).
Он не заставляет переходить на микросервисы, но даёт инструменты для организации модулей, проверки зависимостей и документирования архитектуры.
6. Опционально: подумай о доменных событиях.
Они помогают масштабировать модульность, не ломая монолит.
И если потом решишь вынести модуль отдельно — половина работы уже сделана.
Модульность зависит не от размера системы, а от чёткости её границ.
Хорошо спроектированный модульный монолит может быть гораздо проще в поддержке, чем хаотичная сеть микросервисов.
👉 Java Portal
Post #1877
2.36K
- 👍 7
- ❤ 4