Перейти к содержанию

ADR 0022: Визуальная поверхность разработки UI (AXAML / Blazor) — ориентир WinForms, размещение на MFD

Статус: Proposed
Дата: 2026-04-06
Обновлено: 2026-04-24 — крупный трек UI designer → 0092. Подробности — § История.

Связанные ADR

ADR Роль
0021 PFD / MFD / forward; [§«Плагины и модель внимания»](0021-pfd-mfd-cockpit-attention-model.md#plugins-attention-binding
0010 пресеты режимов и слоты панелей
0017 п. 3
0017 п. 2
0017 п. 3

Контекст

Внешние визуальные дизайнеры для декларативной разметки (Avalonia AXAML, Blazor) часто коммерческие или слабо интегрированы в единый контур IDE. При этом целевой пользовательский опыт для Cascade — не обязательно «как Blend», а скорее цикл как у WinForms: быстро увидеть форму, потыкать элементы, править свойства, не выталкивая основной поток работы с кодом из зоны внимания.

Опыт WPF-дизайнера в Visual Studio часто критикуют как слабый при совмещении с редактором кода в одном экране; при этом вынесенный на второй дисплей или отдельную область превью он перестаёт мешать и становится приемлемым компромиссом.

У Cascade уже есть продуктовая рамка: лобовое — объект работы (редактор); MFD — вторичные инструменты, тяжёлые панели, осознанное переключение (0021). Визуальная поверхность для разметки логично не занимать лобовое по умолчанию, а позиционировать только как инструмент MFD (вкладка / страница / split в регионе MFD). Отдельное окно приложения под превью не используем: вторичность уже выражена зоной MFD; второе TopLevel дублировало бы хром, размазало бы фокус и усложнило бы единый снимок UI / паритет агента без выигрыша по смыслу 0021.


Решение (принципы)

  1. Цель опыта — «WinForms-подобный цикл», не клон Blend. Приоритет: прямое манипулирование + сетка свойств + живое превью и предсказуемая связь с текстом разметки. Кинематографичность анимаций, полный визуальный редактор стилей и «всё мышью» — не обязательные свойства v1.

  2. Размещение по модели внимания 0021. Превью дерева контролов, property grid и связанные панели — кандидаты в MFD (вкладка, страница, split внутри региона MFD). Редактор исходников остаётся на лобовом; дизайнер не обязан быть сшит с одной колонкой с кодом на одном мониторе.

  3. Второй монитор — первоклассный сценарий без второго окна. Остаётся одно главное окно IDE: пользователь выносит его на внешний дисплей целиком, разворачивает на нужном мониторе или использует раскладку «редактор на одном экране, MFD на другом» в рамках того же TopLevel (геометрия каркаса / пресета, см. 0021 про мультимонитор). Это не отдельный TopLevel хоста зоны Mfd по 0017 — отдельный дизайнерский TopLevel вне scope этого ADR.

  4. Две технологии — один продуктовый слой «design surface». AXAML (Avalonia) и Blazor различаются хостингом превью и точками расширения, но сценарий пользователя (открыть файл → увидеть дерево → изменить свойство → сохранить/синхронизировать с текстом) — единый на уровне IDE; расхождения — в адаптерах, не в дублировании несвязанных «мастеров».

  5. Безопасность и изоляция. Превью и дизайн-тайм выполнение — изолированный процесс или ограниченный хост (политика позже детализируется; ориентир — не выполнять произвольный код пользователя в том же процессе, что и полный IDE shell без границ).


Фазы (ориентир; не обязательство сроков)

Фаза Содержание Комментарий
MVP Live preview по сохранению/фокусу + базовое дерево элементов + минимальный property grid для подмножества свойств Уже даёт ценность «как вынесенный WPF designer», без drag-and-drop канвы
Следующий шаг Прямое перемещение/resize на канве (где применимо), синхронизация с разметкой, undo Существенно сложнее инженерно
Дальше Blazor-специфика (маршруты, inject), общие шаблоны, возможно сценарии «из дизайнера в тест» После стабилизации MVP

Не-цели (для ясности)

  • Не целиться в полный аналог Expression Blend как обязательный критерий успеха.
  • Не смешивать роль «дизайн поверхности» с EICAS или с HUD внутри редактора (0021) — это разные контуры внимания.
  • Не обещать в этом ADR конкретный стек процессов (отдельный exe vs AppDomain) — только принцип изоляции.

Последствия

  • Появится явный backlog под инфраструктуру: хост превью, подписка на файлы, маппинг выбора в дереве ↔ курсор/диапазон в тексте.
  • Контракты MCP / снимок UI (0008, 0012): целевой контур для этой фичи — один визуальный корень; расширение под несколько TopLevel (0017) к превью не привязываем.
  • Документация для пользователя (позже): где включается превью, как закрепить на втором мониторе, ограничения v1.

Открытые вопросы

  • Минимальный v1 по технологиям: только AXAML, только встроенный стек Cascade, или сразу заготовка под Blazor host?
  • Нужна ли отдельная вкладка MFD «Design» в пресете по умолчанию или только по команде / режиму Flight?
  • Политика двусторонней синхронизации: только «из текста в превью» в MVP или сразу «клик в дереве → навигация в коде»?

Отклонённые альтернативы (как единственная стратегия)

  • Полагаться только на внешний коммерческий дизайнер без встроенной поверхности в Cascade — отклонено как не соответствующее цели «IDE с собственным контуром инструментов».
  • Размещать превью по умолчанию в центре лобового поверх редактора — отклонено в пользу 0021 (лобовое — объект работы, не конкурировать с тяжёлым превью).
  • Выносить превью во второе окно приложения — отклонено: вторичность уже закрыта регионом MFD в одном кокпите; отдельный TopLevel не требуется и противоречит упрощённому контракту снимка UI для агента.

История изменений

Дата Изменение
2026-04-24 организация работы как отдельного крупного трека0092 (приоритет стеков: Avalonia → Blazor; продуктовые правила — по-прежнему в этом ADR). Ранее 2026-04-06: связь с 0021 §«Плагины и модель внимания». Превью только в MFD одного окна; без отдельного TopLevel; второй монитор = тот же экземпляр IDE, не окно по 0017.