Была ли архитектура проекта разбита на сервисные слои и ограниченные контексты
Что проверяют
Умеете ли вы объяснить, как был устроен ваш проект и почему, и различаете ли слои внутри модуля и границы между предметными областями. Следом спрашивают, как модули общались между собой и как вы не давали им прорастать друг в друга.
Как отвечать
Разведите два понятия, их часто смешивают:
- сервисные слои: деление по технической роли внутри модуля. Контроллер или обработчик роута в Express, Fastify или NestJS разбирает запрос и валидирует вход, сервис содержит бизнес-логику, репозиторий работает с базой через Prisma, TypeORM или Knex. Сервис не знает про
reqиres, поэтому тестируется без HTTP; - ограниченные контексты: понятие из DDD, деление по предметной области. «Заказ» в продажах и «заказ» на складе это разные модели с разными полями и правилами. У каждого контекста своя модель и в идеале свои таблицы, а общаются контексты через явный API или события, а не через чужие таблицы.
Каркас ответа по своему проекту: какие были контексты и как это выражалось в коде (модули NestJS, пакеты в монорепозитории на Nx или Turborepo, отдельные сервисы), как соблюдали границы (запрет лишних импортов через dependency-cruiser или правила ESLint, публичный index.ts у модуля), как контексты обменивались данными (синхронный вызов, очередь на RabbitMQ или Kafka, паттерн outbox). Хорошо назвать и цену: больше кода на границах, дублирование похожих моделей.
Примеры и цифры давайте только свои. Если проект был плоским Express-приложением с логикой прямо в роутах, это честный ответ: опишите, какие проблемы это давало и как бы вы его разделили сейчас.
Где спотыкаются
Называют ограниченным контекстом любую папку или микросервис. Контекст определяется языком и правилами предметной области, а не структурой каталогов.
Обещают, что разбиение ускорило систему. Слои и контексты про сопровождаемость и независимую разработку, производительности они не добавляют, а сетевые вызовы между сервисами её скорее снижают.
Выделяют репозиторий, но оставляют в сервисе SQL и объекты req. Формально слои есть, фактически их нет.