Skip to content

Discovery — Автоматизация и Конвенции

FeatureDiscoveryService — это механизм, который избавляет разработчика от ручной регистрации каждой новой фичи. Он реализует принцип "Convention over Configuration": вы просто создаете папку по стандарту, а движок делает всё остальное.


📂 Конвенция путей и Module Prefix

Discovery работает на основе префикса модуля (обычно {project_name}.features). Это позволяет сервису корректно импортировать файлы из вашей структуры src.

Чтобы Discovery нашел вашу фичу, она должна располагаться по путям:

  • Telegram-фичи: ...features/telegram/{название_фичи}/
  • Redis-фичи: ...features/redis/{название_фичи}/

Внутри каждой такой папки обязательно должен быть файл feature_setting.py.


📜 Контракт feature_setting.py

Этот файл является паспортом фичи. Discovery сканирует его и ищет:

  1. create_orchestrator(container): Функция-фабрика для инстанцирования оркестратора.
  2. MENU_CONFIG: Настройки кнопки для Dashboard.
  3. GARBAGE_STATES / GARBAGE_COLLECT: Настройки для автоматической очистки сообщений.

⚙️ Что автоматизирует Discovery

1. Сбор роутеров (RouterBuilder)

Discovery тесно интегрирован с RouterBuilder — компонентом, который собирает все разрозненные роутеры фич в один Главный Роутер приложения. - Fail Fast: Если в коде хендлеров допущена ошибка, бот упадет с критической ошибкой сразу при старте. Это предотвращает запуск "битого" бота. - Экспорт: Роутер фичи должен быть доступен в handlers/__init__.py.

2. Сбор обработчиков Redis

Для Redis-фич сервис ищет redis_router в пакете handlers и регистрирует его в BotRedisDispatcher.

3. Регистрация в Контейнере

Все созданные через фабрику оркестраторы регистрируются в container.features. Это позволяет Директору находить их по ключу.


🧭 Связанные разделы

  • API: Discovery Service — техническое описание методов.
  • Director — использует оркестраторы, собранные через Discovery.