🏛 Архитектура проекта
Архитектура основана на принципах 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-уровня проекта, который должен развиваться годами.
Такая архитектура обеспечивает:
- предсказуемость
- стабильность
- гибкость
- контроль качества
Это фундамент всей экосистемы, которую мы сейчас строим.