add: Архитектура исполнения DSL и Реестр обработчиков (DSL Query Registry)
This commit is contained in:
@@ -186,4 +186,30 @@
|
|||||||
5. Валидация slug
|
5. Валидация slug
|
||||||
- Добавить в валидатор админки статей (TbArticle) проверку на несовпадение slug с существующими роутами сайта из `urls.py` (чтобы не было конфликта URL-ов).
|
- Добавить в валидатор админки статей (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
|
film0069t-2001.08.xx
|
||||||
Reference in New Issue
Block a user