这是使用XAML和JavaFx构建应用程序的快速,主观, 无权且非常不科学的比较。 比较是基于我与每个人合作的个人经验。 在XAML方面,这意味着WPF和Win8存储应用程序 。 在JavaFx方面,这意味着Windows 7应用程序。
JavaFX
JavaFx被Oracle(以及当时的Sun)吹捧为构建UI的新方法。 它专注于支持现代UI所需的灵活性和图形精美性。 JavaFx可以在浏览器内外运行,也可以在各种操作系统上运行。
我在JavaFx方面的经验是构建仅针对Windows 7的外观美观且非常现代的桌面应用程序。我们选择在ScalaFx(Scala中的声明性JavaFx DSL)中编写视图代码。 效果很好:该应用程序看起来不错,运行良好,并且代码库很干净。 但是有几件事困扰着我:
- UI代码并不像我希望的那样声明。 总的来说,我们发现内置控件不适合我们的需求,因此大多数UI是从.pngs构建的,这些控件附加了鼠标事件。 这些事件会将.png更改为悬停,单击等。 尽管这很好用,但是这意味着视图中的逻辑比我想要的更多。
- 由于上述原因,在某种程度上很难创建XAML数据模板之类的东西,然后将数据绑定到其中。 再次,这导致视图中更命令式的逻辑。
我真正喜欢的东西是:
- 在我看来,与Java同行相比,我们可以在视图中使用Scala的事实确实减少了视图代码中的噪音。 例如,使用函数是一等公民的语言,附加鼠标事件处理程序要容易得多。
- 从测试中以无头模式运行视图代码是相当容易的。 尽管视图代码的TDD工作流程稍微慢了点,但这仍可以使它看起来不错。
XAML
XAML用于一系列Microsoft的UI技术中,包括WPF和Win8商店应用程序(以前称为Metro)和Silverlight。 XAML UI框架还专注于支持现代UI的需求,并且还可以在浏览器内外运行。
我对XAML的经验来自WPF和Win8商店应用程序,在这些应用程序中,我们遵循MVVM方法,没有任何特定框架,但受Caliburn.Micro启发,采用了一些自定义的约定,以简化XAML中的某些重复-特别是在绑定方面。
这也工作得很好,产生了不错的应用程序,但是同样有些事情困扰着我:
- 首先,我讨厌用XML编写代码。 因此,我根本不喜欢XAML语言。 您可能会在此时说XAML是由工具生成的,而不是由人类编写的。 你可能是对的。 尽管如此,我的经验是您确实需要手工编写大多数XAML。 我发现这样做比使用Blend或Visual Studio编辑XAML更快,更易于维护。
- 我不喜欢背后的代码。 在我从事的项目中,我们一直将它们保持在很小的范围内,但是它们仍然在诱人的状态下在脆弱的时刻隐藏无法测试的代码。
我真正喜欢的东西是:
- 与JavaFx一样,无头运行视图进行测试非常简单。 同样,这将启用可接受的TDD工作流程。 再次,尽管有点慢。
- 数据绑定效果很好。 尤其是有一些惯例可以减少样板代码。
- 数据模板尤其可以使视图保持声明性。
结论?
嗯,我认为这里没有足够的数据来得出很多结论。 我将得出的结论是,对于构建Windows应用程序,我的经验是JavaFx和XAML都可以完成工作,但是使用XAML的速度更快,因为数据绑定更容易,数据模板有很多帮助,而且似乎更少手动滚动控件。
但是要当心:我比较的项目并不相同,因此比较苹果和Oragnes的过程是有一定水平的。 也这个很主观。 YMMV。
更新– 2012-12-21
根据反馈,我认为上述结论过于模糊。 需要澄清的是:根据我的经验,两种技术都可以使用,但是XAML可以更快(因此更便宜,并且可以更快地投放市场)使用。
参考: XAML或JavaFx? 从我们的JCG合作伙伴 Christian Horsdal在Horsdal博客上获得。
翻译自: https://www.javacodegeeks.com/2012/12/xaml-or-javafx.html