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.
Решение (принципы)¶
-
Цель опыта — «WinForms-подобный цикл», не клон Blend. Приоритет: прямое манипулирование + сетка свойств + живое превью и предсказуемая связь с текстом разметки. Кинематографичность анимаций, полный визуальный редактор стилей и «всё мышью» — не обязательные свойства v1.
-
Размещение по модели внимания 0021. Превью дерева контролов, property grid и связанные панели — кандидаты в MFD (вкладка, страница, split внутри региона MFD). Редактор исходников остаётся на лобовом; дизайнер не обязан быть сшит с одной колонкой с кодом на одном мониторе.
-
Второй монитор — первоклассный сценарий без второго окна. Остаётся одно главное окно IDE: пользователь выносит его на внешний дисплей целиком, разворачивает на нужном мониторе или использует раскладку «редактор на одном экране, MFD на другом» в рамках того же
TopLevel(геометрия каркаса / пресета, см. 0021 про мультимонитор). Это не отдельныйTopLevelхоста зоны Mfd по 0017 — отдельный дизайнерскийTopLevelвне scope этого ADR. -
Две технологии — один продуктовый слой «design surface». AXAML (Avalonia) и Blazor различаются хостингом превью и точками расширения, но сценарий пользователя (открыть файл → увидеть дерево → изменить свойство → сохранить/синхронизировать с текстом) — единый на уровне IDE; расхождения — в адаптерах, не в дублировании несвязанных «мастеров».
-
Безопасность и изоляция. Превью и дизайн-тайм выполнение — изолированный процесс или ограниченный хост (политика позже детализируется; ориентир — не выполнять произвольный код пользователя в том же процессе, что и полный 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. |