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 сканирует его и ищет:
create_orchestrator(container): Функция-фабрика для инстанцирования оркестратора.MENU_CONFIG: Настройки кнопки для Dashboard.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.