ADR
ADR-001: Выбор модульного монолита
ADR-001: Выбор модульного монолита
Статус: ✅ Accepted
Дата: 2026-06-11
Автор: openclaw-architect
Контекст
SprosOS Seed стартует с маленькой командой (1-3 разработчика) и одним клиентом (EcoYar). Нам нужно:
- Быстро собрать работающий MVP (9 bounded contexts)
- Обеспечить архитектурную чистоту и изоляцию модулей
- Избежать операционной сложности микросервисов (оркестрация, деплой, observability)
Рассматривались два основных подхода:
- Микросервисы — каждый bounded context как отдельный сервис
- Модульный монолит — все BC в одном процессе, но с чёткими границами модулей
Решение
Выбираем модульный монолит.
Все 9 bounded contexts будут развёрнуты как единое приложение, но разделены на модули с явными границами:
- Каждый модуль — отдельная папка в
apps/api/src/modules/ - Модули общаются через явные интерфейсы (не прямые вызовы)
- Данные каждого модуля — через его repository (изоляция доступа к БД)
- Модули могут обмениваться событиями через in-process event bus
Последствия
Положительные (+)
- Простота разработки: Один процесс, один деплой, одни тесты
- Быстрый старт: Не нужно настраивать межсервисное взаимодействие
- Простое тестирование: Интеграционные тесты без моков сетевых вызовов
- Единая БД: Нет проблем с распределёнными транзакциями на старте
Отрицательные (-)
- Риск нарушения границ: Без дисциплины модули "протекают" друг в друга
- Масштабирование: Нельзя масштабировать отдельные компоненты
- Привязка к стеку: Весь проект на Node.js/TypeScript
Стратегия смягчения
packages/domain/— изолированная доменная логика без зависимостей- Каждый модуль имеет свой repository и schema
- Code review проверяет границы модулей
- При необходимости — рефакторинг в микросервисы по одному BC
Связанные документы
- PROJECT_CONSTITUTION.md (архитектура: modular monolith)
- ARCHITECTURE_PRINCIPLES.md (Domain-Core Separation, Open-Closed Contexts)
- BOUNDED_CONTEXTS.md