Архитектура бэкенда
Middleware и DI: тест на свободное воспроизведение
Воспроизведение по памяти лучше перечитывания. Для каждой подсказки проговорите или запишите полный ответ по памяти, прежде чем открыть эталонный — именно усилие припоминания закрепляет две оси модуля в долговременной памяти.
Восстановите хребет модуля, не подглядывая: ось запроса против оси связывания, контракт middleware, composition root, три scope внедрения и их ловушки, тестовый шов и что делает контейнер в проде.
- 01Что такое ось запроса и ось связывания, и почему называние оси — senior-рефлекс?
- 02Сформулируйте контракт Express-middleware и два способа его нарушить.
- 03Что такое inversion of control, что делает composition root и почему service locator — антипаттерн?
- 04Назовите три scope DI, ловушку каждого и правило, избегающее обеих главных ловушек.
- 05Что такое тестовый шов и в чём разница между fake и mock?
- 06Что делает DI-контейнер под капотом, почему циклы его ломают и почему предпочитать eager-старт?
Если вы восстановили каждый ответ по памяти, вы держите хребет модуля: сначала называйте ось; на оси запроса middleware делает ровно одно из pass/terminate/forward, а порядок — граница безопасности и стоимости; на оси связывания классы объявляют потребности, а composition root их поставляет; по умолчанию singleton без состояния, scope повышать только вынужденно; выигрыш DI — это шов, где вы подделываете то, чем владеете, и мокаете границы, которыми не владеете; а контейнер — это тот же composition root, механизированный — топологически сортирующий граф, отвергающий циклы и падающий быстро при старте.