为Windows桌面应用程序选择运行时/语言时要考虑哪些因素?


10

我的用户都有Windows。他们中的一些人使用Linux或Mac,但是如果这样做,他们通常能够使用Mono,Wine,Parallels或双引导之类的东西。

我的开发团队(包括我自己)在以Java编写Swing应用程序以及以C#编写Windows窗体方面都有丰富的经验。“广泛”意味着我们在两个运行时上都开发并交付了三个应用程序。这些应用程序是技术分析应用程序,因此对数据库交互的影响很小,但是对自定义UI和数据集大小的关注却很大。

我们已经到了真正要决定从现在开始关注哪个平台的地步,因为这已经成为同时支持这两个平台的负担(如果您在Swing中工作了半年,那就太麻烦了以便再次适应Windows窗体等),我们希望我们团队中的每个人都能够处理我们所有的应用程序。

  • Windows窗体通常花费较少的工作来制作可识别的Windows应用程序。多年来,Java中没有任何外观和自定义控件能够解决这一问题。同时,我们从来没有一个客户无法使用Swing应用程序。
  • 就库和自动构建工具而言,Java过去拥有更加丰富的生态系统,但是这种变化正在迅速发生(Java并没有失败,.NET的追赶更多。)
  • 对于罕见的首选跨平台的情况,Java击败了.NET。Mono很棒,但是它比Java还要工作。

如果选择.NET,则可以开始关注WPF,也可以开始使用F#。如果选择Java,我们可以开始关注RCP,也可以开始使用Scala。

是否有人必须做出类似的决定?如果是这样,那是什么?对您影响最大的是什么?有什么我最想念的问题吗?

(请注意:Programmers.SE上已经存在一些类似的问题,但是它们不是建设性的,或者是不同的角度。)


2
从阅读的要旨来看,我相信问题标题应该是“在为Windows桌面应用程序选择运行时/语言时应该考虑哪些因素?” ,重点放在问题的决策方面。与标题似乎暗示的那种疑问相比,这比“我应该使用什么?”更容易回答并且传染性较小。
Spoike

@Spoike好点了,我更新了标题(使标题更短)。
戴卡德

1
可能是这个链接有一些有关未来的Windows,这是非常重要的,你们IMHO- zdnet.com/blog/microsoft/...
高尔杉

强迫Mac用户安装Wine并运行Windows应用程序与折磨他们相同。
右击

Answers:


7

我们通过JNI来使用Java(Swing)以及一些本机部分。尽管当今对多平台性的商业需求可能微不足道,但5年后情况可能会有所不同,并且该应用程序(科学测量应用程序)的生命周期将更像是10年以上(其C ++的前身至今仍在使用)源文件(1991年)。如您所写,Java在非Windows环境中击败了.NET,如果我们需要退出Windows,则只需重新编译一些本机部分,也许可以微调GUI外观并检查一切正常。

如果您确定只使用Windows,并且您的应用程序只能使用几年,那么.NET可能是首选。它看起来和行为都更像是本机应用程序。但是作为长期投资,我更信任Java。Swing看起来可能不太完美,启动时间可能更长,由于多平台抽象层,一切都不太理想,但至少它“可行”。


2
.NET应用程序比Java更能作为本机Windows应用程序使用?
宫阪丽

@Rei:.NET框架仅适用于Windows。当然,有单声道,但它总是落后于现在,目前,它的未来还不确定。
陶Szelei

1
@Tamás这是完全不同且偶然的事情。除了显示“此程序无法在DOS模式下运行”的.exe文件中的前几个字节代码外,该程序仍完全是​​字节代码。Java库与.NET库一样,是Windows固有的库,即使由于缺乏实现而使Java库不正确。
宫阪丽

4

您可能要考虑的事情是IKVM项目,该项目使您可以在.NET世界中使用Java代码。然后,您可以获得Java后端的好处,而-据我所知-您可以在Swing或WinForms中拥有薄的前端层。

http://www.ikvm.net/

我听说其他人已经使用它来使用从.NET用Java编写的开源连接库,而不必使用笨拙的.NET版本。



1

我也对此进行了一些思考,我发现答案取决于项目的类型以及可以预见的内容。

有时,创建一个可以为所有平台提供服务的代码库是一件好事-您可以用较少的总体代码获得一定程度的UI一致性。我认为优缺点很明显,因此我将跳过。

有时使用2个本机编写的代码库会更好。例如,如果用WPF编写应用程序对.NET来说很优雅,而用Cocoa编写对Mac OS来说又很优雅,那么生成的代码实际上可能比使用Java或Mono(没有WPF)。在这种情况下,用更少的代码可能会获得更好的结果。

最后一个考虑因素可能是将您的应用程序作为HTML5应用程序甚至是Chrome扩展程序进行,但是这可能太过遗漏了。


1

您考虑过Silverlight吗?它也是构建Windows桌面应用程序(来自SL4 +)并在Mac上正常工作的不错选择。


SL几乎是死..
klm_

微软并不这么认为。我个人认为html5是Web应用程序的首选,但是客户端SL可能是一个很好的技术。
ADIMO 2011年

我也将使用HTML5,因为W3O支持它。我认为,Silverlight正在与HTML5竞争,如果不对它不利,它将死掉。
klm_11年

1

作为一名全职的Java开发人员,我可以告诉您,尽管跨平台兼容性是惊人的,但每个本机集成都是地狱

因此,我总是遇到很多问题,有时甚至失败了。您可能不需要它,但有时我偶然发现了它,并且通常很疼。

  • 与COM集成非常麻烦,有时甚至无法实现COM +(浪费了数周的时间才能使其与Windows Tablet API配合使用)。
  • 硬件交互可能会造成伤害。有时,该API仅在一个平台上可用(例如,相机/扫描仪集成)。
  • 与本地应用程序的交互也会造成伤害。我有没有提到COM的痛苦?好吧,另一种(我们实际使用的)方法是生成并执行VBS脚本,这些脚本会启动Windows应用程序(例如MapPoint或某些专有的映射应用程序)并向其提供数据。
  • 安装和桌面集成(快捷方式,卸载程序,开始菜单)也可能会受到伤害。Web Start非常不可靠。替代方案要么使您付出高昂的代价,要么缺少某些功能(例如更新分发)。

不要误会我的意思。我是Java开发人员,并不意味着要发火。我只是说,如果您怀疑需要上述任何一种,它可能会造成伤害,使用.net可能会更好。至少这是您应该考虑的一个论点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.