fix: PageHead header alignment, analytics proxy, and infra improvements (#64)

🤖 Pull request created from `various-fixes` containing PageHead
breadcrumbs and navigation alignment fixes, Umami analytics proxy, and
infrastructure updates.
This commit is contained in:
deytenit authored and GitHub committed 2026-10-24 16:52:49 +03:00
1 parent ff5a50bad8
commit 9ee672504f
110 files changed
+2649 -1760

No files matched your search

@@ -1,45 +1,45 @@
---
title: Архитектура и Философия
title: Архитектура и философия
weight: 1
---
**Цель:** Понять основные принципы проектирования, лежащие в основе модульности Quetza.
**Цель:** изучить принципы проектирования, определяющие модульную структуру Quetza.
## Философия проектирования
### Соглашение важнее конфигурации (Convention Over Configuration)
### Соглашение важнее конфигурации (Convention over Configuration)
Quetza минимизирует шаблонный код, полагаясь на строгую структуру папок.
Quetza сокращает шаблонный код за счёт строгой структуры каталогов.
- **Никакого центрального реестра:** Сама файловая система _является_ реестром.
- **Результат:** Вам не нужно обновлять файл конфигурации, чтобы добавить модуль; вы просто создаете папку.
- **Без центрального реестра:** файловая система сама выступает реестром.
- **Результат:** чтобы подключить модуль, не нужно редактировать конфигурационные файлы — достаточно создать каталог.
### Композиция важнее наследования (Composition Over Inheritance)
### Композиция важнее наследования (Composition over Inheritance)
Модули состоят из возможностей (capabilities), а не наследуются от базового класса.
Модули собираются из набора возможностей (capabilities), а не наследуются от базового класса.
- **Гибкость:** Модули могут использовать любую внутреннюю архитектуру (Функциональную, ООП), пока они экспортируют необходимые интерфейсы.
- **Гибкость:** внутри модуля можно использовать любую архитектуру (функциональную или ООП), если модуль экспортирует обязательные интерфейсы.
### Изоляция важнее интеграции (Isolation Over Integration)
### Изоляция важнее интеграции (Isolation over Integration)
Модули не могут напрямую вызывать друг друга.
Модули не вызывают друг друга напрямую.
- **Почему:** Это предотвращает сильную связность (tight coupling).
- **Преимущество:** Вы можете удалить любой модуль, не сломав остальную часть бота.
- **Причина:** исключает сильную связанность (tight coupling).
- **Преимущество:** любой модуль можно удалить без риска сломать остального бота.
## Основные сущности
| Сущность | Роль | Жизненный цикл |
| :--- | :--- | :--- |
| **Client** | Локатор сервисов и оркестратор | Синглтон. Руководит всем. |
| **Module** | Пространство имен для функций | Загружается при запуске. |
| **Command** | Конечная точка взаимодействия с пользователем | Без состояния (Stateless). Запрос/Ответ. |
| **Event** | Реактивный наблюдатель (Observer) | Подписывается при запуске. |
| **Controller** | Менеджер состояния | Сохраняется между взаимодействиями. |
| **Client** | Локатор сервисов и оркестратор | Синглтон. Управляет всеми компонентами системы. |
| **Module** | Пространство имён для функций | Загружается при старте. |
| **Command** | Точка взаимодействия с пользователем | Без состояния (stateless). Запрос — ответ. |
| **Event** | Реактивный наблюдатель (observer) | Регистрируется при старте. |
| **Controller** | Менеджер состояния | Сохраняет состояние между запросами. |
---
**См. также:**
## См. также
- [Паттерн Service Locator](https://ru.wikipedia.org/wiki/Локатор_служб)
- [Паттерн Observer](https://ru.wikipedia.org/wiki/Наблюдатель_(шаблон_проектирования))