Модульная архитектура NestJS для B2B платформы
21.05.2024 · Команда Flexagon
С ростом продуктовой гипотезы количество команд и сервисов увеличивается, а изменения распространяются медленно. В этом кейсе мы рассказываем, как разделили домены на изолированные модули, подключили CQRS и событийный контур, а также внедрили тестирование контрактов между сервисами.
С чего начали
- Провели аудит текущего REST API и выявили точки связности.
- Разделили домены на автономные bounded context, описали контракты событий.
- Внедрили принцип “internal only” для всех вспомогательных эндпоинтов.
Что сделали
- Настроили базовый модуль маршрутизации с синхронным REST и асинхронной шиной.
- Вынесли запросы и команды в отдельные CQRS обработчики, избавившись от массивных сервисов.
- Подключили модульные тесты с in-memory PostgreSQL и тестами контрактов через Pact.
Результаты
- Время поставки новых фич сократилось на 30% за счет предсказуемости архитектуры.
- Команды получили автономию: изменения в одном домене не ломают другие.
- Упростили обучение новых разработчиков благодаря явным границам и документации.
В следующих материалах поделимся тем, как обкатываем архитектурные решения на feature environments и мониторим производительность через Observability стек.