Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: layered architecture, clean architecture, hexagonal architecture, service layer, separation of concerns

По какой архитектуре организован код внутри сервисов?

Вопрос проверяет понимание архитектурных паттернов, используемых для организации кода внутри сервисов, таких как слоистая архитектура, чистая архитектура или гексагональная архитектура.

Короткий ответ

Код внутри сервисов обычно организуется по слоистой архитектуре, где выделяются слои: контроллеры (обработка запросов), сервисы (бизнес-логика), репозитории (доступ к данным). Это разделяет ответственность и упрощает тестирование и поддержку. Часто применяется также чистая архитектура, где бизнес-логика не зависит от внешних фреймворков.

Длинный ответ

Архитектура кода внутри сервисов

В современных сервисах код организуется по принципу разделения ответственности, что позволяет сделать систему гибкой, тестируемой и поддерживаемой. Наиболее распространённым подходом является слоистая архитектура, где каждый слой выполняет строго определённую функцию.

Основные слои

  • Контроллеры (Presentation Layer) — обрабатывают входящие HTTP-запросы, валидируют данные и передают их в сервисный слой.
  • Сервисы (Business Logic Layer) — содержат бизнес-логику, правила и координацию между различными компонентами.
  • Репозитории (Data Access Layer) — отвечают за взаимодействие с базой данных или внешними API.

Пример на Node.js с Express

// 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), где бизнес-логика полностью изолирована от внешних зависимостей (фреймворков, баз данных). Это достигается через использование интерфейсов и инверсии зависимостей.

Вывод

Слоистая архитектура подходит для большинства микросервисов и монолитов, обеспечивая баланс между простотой и гибкостью. Чистая архитектура рекомендуется для систем с высокой сложностью и требованиями к долгосрочной поддерживаемости.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Node.js

    Node.js

  • Express

Ключевые слова

#layered architecture

#clean architecture

#hexagonal architecture

#service layer

#separation of concerns

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.