diff --git a/_prj_blueprint/DSL.md b/_prj_blueprint/DSL.md index 7c74ca2..ed03c62 100644 --- a/_prj_blueprint/DSL.md +++ b/_prj_blueprint/DSL.md @@ -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 \ No newline at end of file