声明性UI语言(如XAML和QML)的实际好处是什么?

Stu*_*lar 19 wpf xaml qt qml

我目前正在评估QtQuick(Qt用户界面创建工具包),它将作为Qt 4.7的一部分发布.QML是QtQuick背后基于JavaScript的声明性语言.

它似乎是一个非常强大的概念,但我想知道是否有人在WPF或Silverlight中广泛使用其他更成熟的声明性UI语言(如XAML)可以让我们深入了解可以从中获得的实际好处.这种编程风格.通常引用各种优点:

  • 发展速度
  • 强制表示和逻辑之间的分离
  • 编码员和设计师之间更好的整合
  • UI更改不需要重新编译

还有,有什么缺点吗?我想到了一些潜在的关注领域:

  • 执行速度
  • 内存使用情况
  • 增加复杂性

是否还有其他考虑因素需要考虑?

Tig*_*ine 13

(更新)

与XAML的误解是它没有被编译.它确实编译为BAML二进制预标记化XAML.显然有一个IL编译版的XAML也称为CAML.OP向我指出了这篇很好的文章,解释了XAML/BAML和CAML是什么.

无论如何,为什么要使用它的问题:

XAML只是C#对象的序列化格式,它特别适合描述分层对象结构,如WPF GUI中的结构.

WPF可以帮助您做的是编写不那么无聊的C#代码,如下所示:

var grid = new Grid();
grid.Content.add(new TextBlock() {Text = "Hello"});
grid.Content.add(new TextBlock() {Text = "World"});
Run Code Online (Sandbox Code Playgroud)

并以一种更易读的方式表达它:

<Grid>
  <TextBlock Text="Hello">
  <TextBlock Text="World">
</Grid>
Run Code Online (Sandbox Code Playgroud)

由于WPF对象嵌套(将内容放在其他对象中)可以变得非常深,因此WPF使得它比生成的C#代码更容易阅读.

至于关注点的分离:XAML也有帮助,因为它只允许你表达对象及其关系/属性,而不是逻辑.这迫使您将逻辑与UI布局分开.MVVM模式非常适合此任务,并允许eay可测试性和可互换视图.

XAML中增加的复杂性也很容易被忽略,因为C#中的相同代码比XAML标记更容易复杂.

我不能给你任何关于QTQuick的见解.抱歉


Ahm*_*taq 9

QtQuick可以通过C++插件进行扩展,实际上Qt的人推荐的是你在QtQuick/QML中执行UI,动画,转换等,而你的所有业务逻辑都在C++/Qt中.因此,通过这种方式,您可以获得两全其美的功能,您可以像平常一样调试C++代码,同时使UI变得轻松而且非常容易.

另外一个关于QtQuick/XAML的重要思考是它们是硬件加速的,所以例如你可以毫不费力地获得相当不错的fps.所以他们完成的目标并不慢.

它节省了时间,太多时间.我在3天内用代码做了一个用户界面,在2小时内用QML做了同样的事情.


小智 7

声明性编码,即WPF或QTQuick,是为了在开发人员之间提供一种分离,可能是实现应用程序可视化方面的艺术家.关于WPF,我发现调试变得有点困难.在我们发言时,我正在编写最新的QT以查看QTQuick.(这需要很长时间,我有时间看看stackoverflow :-))所以,我还没有意见.


S.M*_*avi 6

QML/XAML是:

  • 非常适合MVVM模式
  • 硬件加速(使用OpenGL for Windows,MAC,Linux和Phone OS的QML ...使用DirectX for Windows及其手机版本的XAML)
  • 更接近艺术家
  • 您可以使用XAML/QML创建GREAT和NICE UI
  • 更简单的UI实现
  • 好动画是可能的
  • 在XAML中,通常只需稍加更改即可创建应用程序的Silverlight版本
  • 在XAML中,有一些很棒的功能,如模板,触发器(DataTrigger,触发器,EventTrigger),绑定(在任何一侧,也可以在一起),资源,命令,依赖属性和可通知属性.

但请注意XAML :(我是XAML程序员,因此我没有QML的分数)

  • 无法进行XAML调试
  • 对于XAML中的任何更改,必须重新编译所有程序
  • 对表现要更加小心.例如,如果您在XAML中使用了很多RoutedCommands,那么您的应用程序将无法使用!

  • 在XAML中,某些功能无法按预期工作.不幸的是有一些技巧.(应该很清楚......应该按预期工作......不是吗?)

  • 注意一些类似的命名空间,如BitmapEffect和Effect.有不同的功能和成本.(例如,BitmapEffect对软件渲染有一些影响,效果对硬件渲染有一定影响)

  • 在现实世界中,艺术家不能将WPF用作Flash(至少具有良好的性能).

  • 某些功能适用于特殊场所.例如,DataTrigger仅在Style标签中工作,而不在Resource部分中.

  • XAML存在一些缺点.一些例子:没有任何顺序动画......你不能在XAML中进行任何计算(你必须在C#中编写一个转换器,即使是一个简单的工作!JavaSript是QML的一个很好的替代品)......一些属性是重复的.例如x:名称和名称...从ViewModel控制视图不清楚.例如,从ViewModel关闭View(你需要一些CodeBehind)

  • Tooooooo很多运行时错误.如果你在不好的地方使用某些标签,它会注意到你的语法错误,但许多错误只发生在运行时.例如,如果我为ColorAnimation设置Background属性(而不是Background.Color),它将成功编译,但在运行动画时... BUMP ...运行时错误!在Expression Blend的情况下,应用程序将崩溃!