Каковы реальные преимущества языков декларативного пользовательского интерфейса, таких как XAML и QML?

StackOverflow https://stackoverflow.com/questions/2706037

  •  01-10-2019
  •  | 
  •  

Вопрос

Я сейчас оцениваю QtQuick (Qt User Interface Creation Kit), который будет выпущен как часть Qt 4.7. QML — это декларативный язык на основе JavaScript, лежащий в основе QtQuick.

Кажется, это очень мощная концепция, но мне интересно, широко ли кто-нибудь использовал другие, более зрелые языки декларативного пользовательского интерфейса, такие как XAML в WPF или Silverlight может дать представление о реальных преимуществах, которые можно получить от этого стиля программирования.Часто упоминаются различные преимущества:

  • Скорость разработки
  • Силовое разделение между презентацией и логикой
  • Улучшенная интеграция между программистами и дизайнерами.
  • Изменения пользовательского интерфейса не требуют перекомпиляции

И еще, есть ли минусы?На ум приходят несколько потенциальных проблемных областей:

  • Скорость выполнения
  • Использование памяти
  • Добавлена ​​сложность

Есть ли какие-либо другие соображения, которые следует принять во внимание?

Это было полезно?

Решение

(Обновлено)

Заблуждение относительно XAML заключается в том, что он не компилируется.Он действительно скомпилирован в BAML — двоичный предварительно токенизированный XAML.По-видимому, существовала также скомпилированная IL версия XAML под названием CAML.ОП указал мне на это хорошая статья объясняя, что такое XAML/BAML и CAML.

В любом случае, на вопрос, зачем его использовать:

XAML — это просто формат сериализации для объектов C#, который особенно хорошо подходит для описания иерархических структур объектов, например, в графических интерфейсах WPF.

WPF помогает вам писать менее скучный код C#, например:

var grid = new Grid();
grid.Content.add(new TextBlock() {Text = "Hello"});
grid.Content.add(new TextBlock() {Text = "World"});

и просто выразите это более читабельным способом, например так:

<Grid>
  <TextBlock Text="Hello">
  <TextBlock Text="World">
</Grid>

Поскольку вложенность объектов WPF (помещение данных внутрь других объектов) может оказаться очень глубокой, WPF значительно упрощает чтение, чем полученный код C#.

Что касается разделения задач:XAML здесь тоже помогает, поскольку он позволяет выражать только объекты и их отношения/свойства, а не логику.Это заставляет вас отделять логику от макета пользовательского интерфейса.Шаблон MVVM очень хорошо подходит для этой задачи и обеспечивает легкость тестирования и взаимозаменяемость представлений.

Дополнительную сложность XAML также можно легко игнорировать, поскольку тот же код на C# становится сложнее, чем разметка XAML.

Однако я не могу дать вам никакого представления о QTQuick.Извини

Другие советы

QtQuick можно расширять с помощью плагинов C++, на самом деле ребята из Qt рекомендуют вам создавать пользовательский интерфейс, анимацию, переходы и т. д. в QtQuick/QML, в то время как вся ваша бизнес-логика находится в C++/Qt.Таким образом, вы получаете лучшее из обоих миров: вы можете отлаживать свой код C++, как обычно, и в то же время создание пользовательских интерфейсов становится легким и чрезвычайно простым.

Еще одна важная мысль о QtQuick/XAML заключается в том, что они имеют аппаратное ускорение, поэтому, например, вы можете без каких-либо усилий получить довольно хороший fps.Поэтому они совсем не медлят с тем, чего намеревались достичь.

Это экономит время, очень много времени.UI с кодом я сделал за 3 дня, на QML то же самое сделал за 2 часа.

Суть декларативного кодирования, т.е.WPF или QTQuick призваны обеспечить разделение между разработчиком и, предположительно, художником, реализующим визуальные аспекты вашего приложения.Что касается WPF, я считаю, что отладка становится немного сложнее.Пока мы говорим, я компилирую последнюю версию QT, чтобы посмотреть на QTQuick.(Это занимает много времени, и у меня есть время взглянуть на stackoverflow :-)) Итак, у меня пока нет мнения по этому поводу.

QML/XAML:

  • Отлично подходит для шаблона MVVM
  • Аппаратное ускорение (QML с использованием OpenGL для ОС Windows, MAC, Linux и телефонов...XAML с использованием DirectX для Windows и его версии для телефона)
  • Ближе к художникам
  • Вы можете создать ОТЛИЧНЫЙ и ПРИЯТНЫЙ пользовательский интерфейс, используя XAML/QML.
  • Более простая реализация пользовательского интерфейса
  • Возможна красивая анимация
  • В XAML обычно можно создать версию приложения Silverlight с небольшими изменениями.
  • В XAML есть несколько замечательных функций, таких как шаблон, триггер (DataTrigger, Trigger, EventTrigger), привязка (с любой стороны, а также с обеих сторон вместе), ресурс, команды, DependencyProperty и уведомляемые свойства.

Но обратите внимание в XAML:(Я программист XAML, поэтому за QML у меня нет баллов)

  • Отладка XAML невозможна
  • При любых изменениях в XAML всю программу необходимо перекомпилировать.
  • Будьте более внимательны к производительности.Например, если вы используете много RoutedCommands в XAML, ваше приложение станет непригодным для использования!

  • В XAML некоторые функции работают не так, как ожидалось.К сожалению, есть некоторые хитрости.(должно быть понятно...должно работать как положено...не так ли?)

  • Будьте осторожны с некоторыми похожими пространствами имен, такими как BitmapEffect и Effect.Есть разные характеристики и стоимость.(например.BitmapEffect имеет некоторые эффекты при программном рендеринге, а Effect имеет некоторый эффект при аппаратном рендеринге)

  • В реальном мире художники не могли использовать WPF в качестве Flash (по крайней мере, с хорошей производительностью).

  • Некоторые функции работают в особых местах.Например, DataTrigger работает только в теге «Стиль», а не в разделе «Ресурсы».

  • В XAML есть некоторые недостатки.Некоторые примеры:нет никакой последовательной анимации...вы не можете выполнять какие-либо вычисления в XAML (вам придется написать конвертер на C# даже для небольшой работы!JavaSript — отличная замена QML)...некоторые атрибуты дублируются.напримерх: Имя и имя...Управление представлением из ViewModel неясно.напримерзакрытие View из ViewModel (вам нужен CodeBehind)

  • Слишком много ошибок во время выполнения.Если вы используете некоторые теги в неправильном месте, он заметит синтаксическую ошибку, но многие ошибки возникают только во время выполнения.напримересли я нацелюсь на свойство Background (вместо Background.Color) для ColorAnimation, оно будет успешно скомпилировано, но при запуске анимации...УДАРЯТЬСЯ...ошибка выполнения!!!в таком случае в Expression Blend произойдет сбой приложения!!!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top