Подтвердить что ты не робот

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

В настоящее время я оцениваю QtQuick (комплект создания пользовательского интерфейса Qt), который будет выпущен как часть Qt 4.7. QML - это декларативный язык, основанный на JavaScript, за QtQuick.

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

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

Кроме того, есть ли недостатки? Несколько потенциальных проблем, вызывающих озабоченность, spring:

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

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

4b9b3361

Ответ 1

(обновлено)

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

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

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

Что WPF поможет вам сделать, это написать менее скучный код на С# следующим образом:

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 упрощает чтение, чем полученный С# -код.

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

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

Я не могу дать вам никакого понимания QTQuick. К сожалению

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

QML/XAML:

  • Отлично подходит для шаблона MVVM
  • Аппаратное ускорение (QML с использованием OpenGL для ОС Windows, MAC, Linux и телефонов) XAML с использованием DirectX для Windows и его версии телефона)
  • Ближе к художникам
  • Вы можете создать GREAT и NICE UI, используя XAML/QML
  • Простая реализация пользовательского интерфейса
  • Приятная анимация возможна
  • В XAML обычно вы можете создать версию приложения Silverlight с небольшими изменениями
  • В XAML есть несколько замечательных функций, таких как Template, Trigger (DataTrigger, Trigger, EventTrigger), Binding (с любой стороны, а также обе стороны вместе), Resource, Commands, DependencyProperty и Notifiable Properties.

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

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

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

  • Будьте осторожны с некоторыми подобными пространствами имен, такими как BitmapEffect и Effect. Существуют разные функции и затраты. (например, BitmapEffect имеет некоторые эффекты с программным рендерингом, а эффект оказывает некоторое влияние на аппаратную визуализацию)

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

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

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

  • Tooooooo много ошибок во время выполнения. Если вы используете некоторые теги в плохом месте, вы заметите ошибку синтаксиса, но многие ошибки возникают только во время выполнения. например если я целевое свойство фона (вместо Background.Color) для ColorAnimation, оно будет скомпилировано успешно, но в запуске анимации... BUMP... ошибка времени выполнения!!! в таком случае в Expression Blend приложение будет аварийно завершено!!!