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