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

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

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

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

Кроме того, есть ли недостатки? На ум приходит несколько потенциальных проблем:

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

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

Ответы [ 4 ]

13 голосов
/ 25 апреля 2010

(обновлено)

Неправильное представление о XAML состоит в том, что он не скомпилирован. Это действительно компилируется в BAML двоичный предварительно токенизированный XAML. Очевидно, была версия XAML, скомпилированная IL, также называемая 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. К сожалению

8 голосов
/ 18 июня 2010

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

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

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

7 голосов
/ 25 апреля 2010

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

6 голосов
/ 01 декабря 2011

QML / XAML:

  • Отлично подходит для шаблона MVVM
  • Аппаратное ускорение (QML с использованием OpenGL для ОС Windows, MAC, Linux и Phone ... XAML с использованием DirectX для Windows и его версии для телефона)
  • Ближе к художникам
  • Вы можете создать БОЛЬШОЙ и КРАСИВЫЙ пользовательский интерфейс, используя 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 имеет некоторые эффекты при программной визуализации, а Effect имеет некоторый эффект при аппаратной визуализации)

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...