Каковы реальные преимущества языков декларативного интерфейса, таких как XAML и QML?
В настоящее время я оцениваю QtQuick (комплект создания пользовательского интерфейса Qt), который будет выпущен как часть Qt 4.7. QML - это декларативный язык, основанный на JavaScript, за QtQuick.
Кажется, это очень мощная концепция, но мне интересно, если кто-нибудь, кто широко использовал другие, более зрелые декларативно-пользовательские языки, такие как XAML в WPF или Silverlight может дать какое-либо представление о реальных преимуществах, которые могут быть получены в этом стиле программирования. Часто упоминаются различные преимущества:
- Скорость разработки
- Сила разделения между представлением и логикой
- Улучшенная интеграция между кодировщиками и дизайнерами
- Изменения в пользовательском интерфейсе не требуют повторной компиляции
Кроме того, есть ли недостатки? Несколько потенциальных проблем, вызывающих озабоченность, spring:
- Скорость выполнения
- Использование памяти
- Добавленная сложность
Есть ли какие-либо другие соображения, которые следует учитывать?
Ответы
Ответ 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 приложение будет аварийно завершено!!!