Проверяет понимание паттернов проектирования, которые используются в стандартной библиотеке Node.js, и умение узнавать их в реальном API.
Стандартная библиотека Node.js не просто набор утилит — она построена на классических паттернах проектирования, которые проявляются в её публичном API. Умение их замечать помогает писать код в стиле платформы и переиспользовать готовые решения.
Класс EventEmitter — канонический пример паттерна Observer. Объекты генерируют события, а подписчики реагируют на них, не зная друг о друге.
const { EventEmitter } = require('events');
const emitter = new EventEmitter();
emitter.on('data', (chunk) => console.log('got', chunk));
emitter.emit('data', 'hello');
Функции вида http.createServer(), fs.createReadStream(), crypto.createHash() — это фабрики: они инкапсулируют создание сложных объектов. А система модулей Node кэширует результат require, реализуя Singleton: один и тот же модуль возвращает один и тот же экземпляр.
Streams позволяют подменять стратегию обработки данных (чтение, трансформация, запись) без изменения потребителя. Transform — это Decorator: он оборачивает поток и добавляет поведение.
const { Transform } = require('stream');
const upper = new Transform({
transform(chunk, enc, cb) {
cb(null, chunk.toString().toUpperCase());
}
});
process.stdin.pipe(upper).pipe(process.stdout);
Итог: знание паттернов в stdlib Node помогает быстрее читать документацию, писать идиоматичный код и осознанно выбирать готовые абстракции вместо самодельных велосипедов.