add: Архитектура исполнения DSL и Реестр обработчиков (DSL Query Registry)

This commit is contained in:
2026-08-09 23:30:48 +03:00
parent 215d1f286d
commit 903a16373e
+26
View File
@@ -186,4 +186,30 @@
5. Валидация slug
- Добавить в валидатор админки статей (TbArticle) проверку на несовпадение slug с существующими роутами сайта из `urls.py` (чтобы не было конфликта URL-ов).
---
## 6. Архитектура исполнения DSL и Реестр обработчиков (DSL Query Registry)
Для предотвращения написания «макаронного» кода во вьюхах и обеспечения высокой расширяемости система исполнения DSL строится на основе паттерна **«Реестр обработчиков» (Registry Pattern)**.
### Принцип разделения ответственности:
1. **Вьюха `hub_detail` (`HubView`):**
- Выступает исключительно в роли входных ворот.
- Ищет объект `TbArticle` по слагу и передаёт его в контекст шаблона `content/hub.html`.
- Не содержит хардкода выборок, разбора параметров и формирования SQL-запросов.
2. **Template Tag `{% render_hub_blocks article %}`:**
- Читает массив `j_article_metadata['hub']` из полученной статьи.
- Итерируется по кортежам DSL и передаёт их в ядро исполнения DSL.
- Вызывает шаблоны визуальных компонентов (`carousel.html`, `grid.html`, `list.html`, `teaser.html`) с контекстом, подготовленным обработчиками.
3. **Реестр обработчиков выборок (`DSLQueryRegistry`):**
- Модуль, содержащий карту функций-обработчиков (Query Handlers), зарегистрированных через декоратор `@DSLQueryRegistry.register("prefix")`.
- Каждое пространство имён 1-го позиционного параметра (`articles:type`, `offers:artist`, `offers:format`, `offers:style`, `single_slug`, `!module`) имеет свой изолированный обработчик на 3–5 строк кода.
### Принцип обработки автоматических пресетов для товаров (`ArticleType.ITEM`):
- Если для конкретного релиза/товара `j_article_metadata['hub']` пуст, ядро DSL формирует динамический виртуальный массив блоков на основе Foreign Key связей объекта (`k_item_to_artist`, `k_offer_to_label`, `k_style`).
- Виртуальные блоки прогоняются через тот же самый реестр `DSLQueryRegistry`, обеспечивая единообразие вывода контента без загромождения БД и дублирования логики.
film0069t-2001.08.xx