<small>Предыдущие статьи:

- ➡️ [Раздел 03. Быстрый старт](/docs/03-quick-start)
- ➡️ [Раздел 04. Философия](/docs/04-philosophy)
- ➡️ [Раздел 05. Принципы работы](/docs/05-principles)
</small>
# SLOT-H: Архитектура

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

---

## Общая схема

Запрос приходит в `index.php` - единую точку входа. `Router` инициализирует объект `Request`, который парсит URL и определяет модуль, контроллер и экшен. Затем подключается `Bootstrap` модуля, загружается `Preloader` для проверки прав доступа, и вызывается контроллер. Контроллер работает с моделями через `DbTables`, а результат передаётся в `View` для рендеринга. Весь процесс завершается выводом HTML или JSON.

---

## Слои системы

**Ядро** - фундамент, на котором строится всё остальное. Оно обеспечивает маршрутизацию, автозагрузку, работу с базами данных, ORM, шаблонизацию, кеширование и очереди. Ядро не содержит бизнес-логики и не зависит от модулей.

**Модули** - надстройки над ядром. Каждый модуль решает свою задачу и имеет единую структуру: `Bootstrap`, `Crud`, `Preloader`, `Controllers`, `Models`, `Views`, `Public`. Модули могут быть добавлены, удалены или заменены без изменения ядра. Исключение - модуль `Base`, который является неотъемлемой частью системы.

**Хелперы** - утилиты, которые используются модулями для выполнения типовых операций: работа с датами, файлами, геоданными, строками, API-запросами. Хелперы не содержат бизнес-логики и не зависят от модулей.

**Конфигурация** - три уровня параметризации: глобальный `config.php`, конфигурация проекта в ini-файлах, динамические константы в таблице `constants`. Каждый уровень дополняет предыдущий, а не переопределяет его.

---

## Взаимодействие компонентов

Ядро предоставляет инструменты, модули используют их. Модули не зависят друг от друга и могут работать изолированно. Хелперы вызываются из модулей при необходимости. Конфигурация определяет поведение системы на всех уровнях.

---

## Жизненный цикл запроса

1. Запрос поступает в `index.php`
2. `Router` инициализирует `Request`, определяет модуль, контроллер, экшен
3. Загружается `Bootstrap` модуля
4. `Preloader` проверяет авторизацию и права доступа
5. Контроллер обрабатывает запрос, используя модели через `DbTables`
6. `View` рендерит шаблон из папки `Views`
7. Результат возвращается пользователю

---

## Мультипроектность

Система поддерживает неограниченное количество проектов. Каждый проект идентифицируется по домену или IP-адресу, имеет свой ini-файл и папку для логов. Данные проектов изолированы через поле `project_id` во всех таблицах. При этом все проекты обслуживаются одним экземпляром кода.

---

## Ядро и модули

Ядро не знает о модулях. Оно предоставляет API для работы с запросами, базой данных, шаблонами. Модули подключаются автоматически при наличии папки в директории `Modules`. Модуль `Base` является обязательным и не может быть удалён.

---

## Итог

Архитектура построена на принципах минимализма, предсказуемости и разделения ответственности. Ядро даёт инструменты, модули используют их для решения задач, хелперы упрощают типовые операции, конфигурация управляет поведением. Это позволяет развивать систему без переписывания существующего кода.

---

## Что дальше?

- ➡️ [Раздел 07. Автолоадер](/docs/07-autoloader)
- ➡️ [Раздел 08. Соглашение о хранилище данных](/docs/08-database)
- ➡️ [Раздел 09. Параметризация](/docs/09-parametrization)
