add: Архитектура исполнения DSL и Реестр обработчиков (DSL Query Registry)
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user