Вопрос проверяет понимание архитектурных паттернов, используемых для организации кода внутри сервисов, таких как слоистая архитектура, чистая архитектура или гексагональная архитектура.
В современных сервисах код организуется по принципу разделения ответственности, что позволяет сделать систему гибкой, тестируемой и поддерживаемой. Наиболее распространённым подходом является слоистая архитектура, где каждый слой выполняет строго определённую функцию.
// userController.js
const userService = require('./userService');
async function createUser(req, res) {
try {
const user = await userService.createUser(req.body);
res.status(201).json(user);
} catch (error) {
res.status(400).json({ error: error.message });
}
}
// userService.js
const userRepository = require('./userRepository');
async function createUser(data) {
// бизнес-логика: проверка уникальности email
const existing = await userRepository.findByEmail(data.email);
if (existing) throw new Error('Email already exists');
return userRepository.save(data);
}
// userRepository.js
const db = require('./db');
async function findByEmail(email) {
return db.query('SELECT * FROM users WHERE email = $1', [email]);
}
async function save(data) {
return db.query('INSERT INTO users ...', [data]);
}В более сложных проектах применяется чистая архитектура (Clean Architecture), где бизнес-логика полностью изолирована от внешних зависимостей (фреймворков, баз данных). Это достигается через использование интерфейсов и инверсии зависимостей.
Слоистая архитектура подходит для большинства микросервисов и монолитов, обеспечивая баланс между простотой и гибкостью. Чистая архитектура рекомендуется для систем с высокой сложностью и требованиями к долгосрочной поддерживаемости.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
Node.js
Express
Ключевые слова
Подпишись на Golang Developer в телеграм