Skip to content

Примеры кода для для доклада «Node.js без Nest.js. Практическое руководство по чистой архитектуре»

Notifications You must be signed in to change notification settings

AntonovIgor/clean-architecture-in-nodejs_2025

Repository files navigation

Node.js без Nest: Практическое руководство по чистой архитектуре

Node.js TypeScript Express License

Исходники примеров к докладу на митапе Health Samurai
📅 Дата выступления: 23 октября 2025
🔗 Лендинг: health-samurai.ru/clean-arch
🍿 Запись доклада: в процессе подготовки
📚 Презентация: См. файл node-without-nest.pdf в ветке chapter_2_good

📖 О проекте

Этот репозиторий демонстрирует практическую реализацию Clean Architecture на Node.js без использования фреймворков типа Nest.js. На примере простого сервиса оформления заказов показано, как структурировать код для достижения максимальной тестируемости, поддерживаемости и независимости от внешних фреймворков.

✨ Что внутри

  • Clean Architecture — полная имплементация на примере сервиса заказов
  • 🎯 Use Cases — бизнес-логика, изолированная от деталей реализации
  • 🗄️ Repository Pattern — абстракция над источниками данных
  • 💉 IoC/DI — инверсия зависимостей с помощью Inversify
  • 🎨 Абстракции над Express — Controllers, Exception Filters, Middleware
  • 🚨 Доменные ошибки — типизированная обработка ошибок
  • 📦 DTO — валидация и трансформация данных

📂 Структура репозитория

Проект разделён на две ветки для наглядного сравнения подходов:

chapter_1_bad — «До»

Типичное Express-приложение из туториалов:

  • ❌ Минимальное разделение ответственности
  • ❌ Дублирование логики в разных частях
  • ❌ Сложность покрытия тестами
  • ❌ Тесная связанность компонентов

chapter_2_good — «После»

То же приложение с применением Clean Architecture:

  • ✅ Чёткое разделение по слоям
  • ✅ Независимость бизнес-логики от фреймворка
  • ✅ Высокая тестируемость
  • ✅ Гибкость к изменениям

Примечание: Для упрощения примера сделаны некоторые допущения: Express не вынесен за абстракцию, вместо реальной БД используется in-memory хранилище, доменные ошибки собраны в общей директории.

🚀 Быстрый старт

Установка зависимостей

npm install

Запуск в режиме разработки

npm run start:dev

Сборка и запуск production-версии

npm run build
npm start

🛠️ Доступные команды

Команда Описание
npm run build Полная сборка приложения (clean + compile)
npm start Запуск скомпилированной версии
npm run start:dev Запуск в режиме разработки через ts-node
npm run lint Проверка кода с помощью ESLint
npm run clean Удаление директории dist
npm run compile Компиляция TypeScript в JavaScript
npm run ts Выполнение произвольного TS-скрипта через ts-node

🏗️ Архитектура

src/
├── core /             # Абстракции, код для работы с фреймворком
├── modules /          # Модули приложения
├──── domain/          # Бизнес-логика и сущности
├──── application/     # Use Cases и интерфейсы
├──── infrastructure/  # Реализация репозиториев, БД
└──── presentation/    # Controllers, HTTP-слой

📚 Полезные материалы

💬 Контакты и обратная связь

Есть вопросы или предложения? Буду рад обсудить!

📄 Лицензия

MIT © [Игорь Антонов](mailto: [email protected]) 2025

About

Примеры кода для для доклада «Node.js без Nest.js. Практическое руководство по чистой архитектуре»

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published