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:
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/Наблюдатель_(шаблон_проектирования))
|
||||
Reference in new issue
Block a user