Node.js опирается на несколько паттернов проектирования, которые подходят его системе модулей, асинхронной модели и потоковому вводу-выводу. Самые распространённые, которые должен узнавать каждый backend-разработчик:
Node.js опирается на несколько паттернов проектирования, которые подходят его системе модулей, асинхронной модели и потоковому вводу-выводу. Самые распространённые, которые должен узнавать каждый backend-разработчик:
module.exports / export, сохраняя внутренности приватными. Основа организации кода в Node.// db.js — каждый `require("./db")` получает этот же pool (singleton через кеш модулей).
const pool = createPool(process.env.DATABASE_URL);
module.exports = pool;
function createLogger(kind) {
return kind === "json" ? new JsonLogger() : new TextLogger();
}
EventEmitter, потоки и большинство core-модулей используют его.const { EventEmitter } = require("node:events");
const bus = new EventEmitter();
bus.on("order:paid", (o) => sendReceipt(o));
bus.emit("order:paid", order);
(ctx, next), популяризированный Express/Koa. Отлично подходит для сквозной функциональности (auth, логирование, валидация).app.use((req, res, next) => { req.startedAt = Date.now(); next(); });
const { pipeline } = require("node:stream/promises");
await pipeline(fs.createReadStream("in"), gzip(), fs.createWriteStream("out.gz"));
| Потребность | Паттерн |
|---|---|
| Один общий ресурс | Singleton (кеш модулей) |
Создавать объекты, скрыть new | Factory |
| Реагировать на async-события | Observer / EventEmitter |
| Сквозная логика запроса | Middleware |
| Безопасно обрабатывать большие данные | Streams / pipeline |
| Тестируемые, слабосвязанные зависимости | Dependency Injection |
Паттерны — это общий словарь: сказать «config — это кешированный по модулю singleton» или «auth — это middleware» передаёт дизайн в нескольких словах. Само ядро Node (EventEmitter, потоки, система модулей) построено из них, поэтому их распознавание помогает читать фреймворки и структурировать собственные сервисы. Интервьюеры используют этот вопрос, чтобы проверить, что вы не просто соединяете коллбэки как попало, а тянетесь к подходящему паттерну — и знаете его компромиссы, например, что singleton усложняет тестирование глобального состояния.
Библиотека вопросов для IT-собеседований с подробными ответами — от Junior до Senior.
Поддержать