Skip to main content

🏛 Архитектура проекта

Архитектура основана на принципах Clean Architecture, SOLID, и чётком разделении ответственности между слоями.
Это обеспечивает масштабируемость, лёгкость поддержки и предсказуемость поведения системы.


🎯 Основная идея

Все зависимости в проекте направлены внутрь, к бизнес-логике.
Это позволяет:

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

🧩 Архитектурные слои

┌────────────────────────────────────────┐ │ Presentation Layer │ ← UI, CLI, API Endpoints └────────────────────────────────────────┘ ↓ зависимость внутрь ┌────────────────────────────────────────┐ │ Application Layer │ ← use-cases, services └────────────────────────────────────────┘ ↓ зависимость внутрь ┌────────────────────────────────────────┐ │ Domain Layer │ ← бизнес-логика, сущности └────────────────────────────────────────┘ ↓ зависимость внутрь ┌────────────────────────────────────────┐ │ Infrastructure Layer │ ← имплементации API, БД └────────────────────────────────────────┘


📦 Domain Layer (ядро)

Содержит:

  • сущности (Entities)
  • бизнес-правила
  • value objects
  • доменные сервисы

Особенности:

  • не зависит ни от одного слоя
  • чистый TypeScript
  • легко тестируется
  • стабилен долгие годы

⚙️ Application Layer (use-cases)

Содержит:

  • сценарии использования (Use Cases)
  • application-services
  • входные и выходные DTO

Особенности:

  • содержит бизнес-процессы (но НЕ бизнес-логику)
  • зависит только от Domain Layer
  • не знает ничего о БД, HTTP и UI

🌐 Infrastructure Layer

Содержит:

  • API-клиенты
  • репозитории
  • базы данных
  • интеграции
  • логирование
  • адаптеры

Особенности:

  • знает детали работы внешних сервисов
  • меняется чаще всех
  • подменяется моками в тестах

🖥 Presentation Layer

Содержит:

  • CLI
  • REST API endpoints
  • UI (если есть)
  • слой взаимодействия с пользователем

Особенности:

  • преобразует запросы → вызывает use-cases → возвращает результат
  • не содержит логики

🧪 Как архитектура упрощает тесты?

  • Domain тестируется отдельно
  • Application тестируется через изолированные сценарии
  • Infrastructure мокаем
  • Presentation тестируется минимально

Результат:

  • быстрые тесты
  • надёжная логика
  • минимальная связность слоёв

🚀 Преимущества выбранной архитектуры

  • Масштабируемость без боли
  • Чёткое разделение ответственности
  • Простота для новых разработчиков
  • Минимальная связность
  • Лёгкая смена технологий (БД, API, UI)
  • Строгая типизация на всех уровнях

💬 Почему это важно?

Потому что этот template — основа для production-уровня проекта, который должен развиваться годами.

Такая архитектура обеспечивает:

  • предсказуемость
  • стабильность
  • гибкость
  • контроль качества

Это фундамент всей экосистемы, которую мы сейчас строим.