使用哪个丰富的客户端平台?

16

我们最近开始开发一个Java桌面应用程序,管理层要求我们使用丰富的客户端平台(Rich Client Platform)。我知道有四个Java RCP可供选择,它们分别是:

  1. Eclipse RCP - ecipse rcp的网页链接,
  2. Netbean RCP - Netbeans RCP网站,
  3. Spring RCP - spring rich client
  4. Valkyrie RCP - Valkyrie rich client

是否有人对其中任意一个有经验?如果有,它们各自的优点和缺点是什么?

谢谢


3
似乎现在Spring RCP已经不再更新了。 - givanse
这是一个非常晚的答案,但我们目前正在开发一个五年历史的NetBeans RCP应用程序。我们能够完全将其迁移到Maven。只需要很少的步骤,就可以使用IntelliJ IDEA开发和调试应用程序,它使您拥有成熟的RCP平台以及出色的IDE。 - gorefest
11个回答

10

引言 - 如果您只对结果感兴趣请跳过这部分 ;)
我正在开发一种定制的编程语言编辑器,与JSP非常类似。首先我使用NetBeans platform实现了我的论文编辑器。毕业后,我找到了一份工作,并要求我在Eclipse RCP中实现相同的东西,因此现在我至少可以比较这两个平台在我在此项目中面临的问题。

结果 - 如果我有选择Netbeans平台和Eclipse RCP之间的机会,我肯定会选择NetBeans平台。为什么?
很棒的演示视频,好的教程,非常活跃、友好和乐于助人的社区,相当好的文档和良好的代码规范编写源代码,还有一些有趣的小工具(cookies, lookup)。它就是适合我。

那为什么Eclipse RCP不适合我呢?
文档较弱,规范和API有时候...嗯...对我来说太奇怪了 :-) 经常看到像这样的方法:

/**
* Returns a description of the cursor position.
*
* @return a description of the cursor position
* @since 2.0
*/
protected String getCursorPosition() {
..
}

我当时觉得他们一定是在开玩笑:-D 我该如何使用这种方法呢? 或者说:

/**
* Returns the range of the current selection in coordinates of this viewer's document.
*
* @return a <code>Point</code> with x as the offset and y as the length of the current selection
*/
Point getSelectedRange();

尽管属性数量和类型适合,但我并不认为Point对象是存储范围的理想数据结构 ;-)

Eclipse RCP中存在许多此类令人惊讶的情况。


7

虽然有点晚了,但可能还有人会看到这个页面。

我建议选择Netbeans RCP:

1)Netbeans平台很成熟,已经发展成为一个易于使用的开发应用程序的平台。

2)入门非常容易,而Eclipse RCP的学习曲线相当陡峭。只需访问http://netbeans.org/kb/trails/platform.html,那里有教程和视频(观看前10个API视频并在阅读书籍之前尝试教程,这样您就可以提前掌握要点)。

3)关于Netbeans RCP的书籍(我想有两本),都是最新的(只有一些小变化,不会带来太多问题)。而RCP的主要书籍长时间没有更新(直到2010年5月才发布了新版,对于Eclipse RCP开发人员来说,这是个好消息。当我在学习时,它还没有出版。我对那些不发布新版本、几乎把新开发者置于困境中的作者感到沮丧。并非每个人都喜欢阅读文档。不发布更新的书籍几乎等同于扼杀技术)。我希望能看到两个平台的菜谱类型书籍。

4)Netbeans拥有完整集成的GUI构建器,这是一个巨大的优势。Eclipse RCP要么手工编码,要么购买第三方GUI构建器。

5)Netbeans平台具有非常酷的Lookup API,用于模块间通信。我想Eclipse的开发者使用扩展点来实现这个目的。但是一旦掌握了Lookup API,它就很容易上手。

6)无论如何,选择哪个平台都是一个重大的设计决策。Netbeans平台适合我,但对您可能不适用。两个平台都需要付出努力,都提供了出色的“开箱即用”功能。试用两者,然后再做决定。


6

我建议你看一下JSR 296 - 虽然它还没有完全完成,但我认为它在提供每个Java GUI应用程序都需要的某些核心功能方面达到了最佳效果,而不会强制你生活在过于复杂的框架中。

我已成功使用JSR 296创建了一个中型应用程序。 对于此应用程序中的窗口布局,我们使用MyDoggy(强烈推荐)。 对于布局管理,我们使用MiGLayout(超级推荐)。 对于数据绑定,我们使用JSR 295的修改形式(我们在JSR 295之上实现了类似于PresentationModel的东西,用于GUI绑定)。 我正在将Guice作为DI机制并入,但尚未完成该工作(到目前为止,我认为它会与JSR 296“很好地”协同工作,只需要进行一些微调)。 让我们看看......持久性是这里的重要缺失环节-我目前正在评估Simple以进行XML持久化,但在将其与像Guice这样的DI容器一起使用时遇到了问题。 我已经使Betwixt正常运行,但对Betwixt的依赖关系非常巨大,因此我们正在寻找更简化的替代方案。

关于 Java 的其他 RCP 选项的看法:

NetBeans: 我对 NetBeans 使用的方法有一些基本哲学上的反对意见(对我来说,使用了太多设计反模式)。最终,这个框架会迫使你做出糟糕的设计决策 - 如果你不使用 NetBeans 作为你的 IDE,它几乎是不可能使用的(我尝试过,但我就是无法从 Eclipse 切换到 NB)。也许只是我个人的问题,但似乎应该可以为 RCP 框架编写代码,而不使用大量复杂的向导和自动生成的代码和 XML 文件。我花了很多时间去解决由 Visual Studio 生成的旧的 Visual C++ 代码,因此我非常谨慎任何无法手工编码的框架。

Spring RCP: Spring 的团队有一个很好的稳定设计,但文档真的非常、非常薄弱。要快速掌握它还是相当困难的(但一旦你掌握了它,你可以很快地完成任务)。

Eclipse RCP: 由于部署开销较大,我们没有使用Eclipse(这取决于您的目标受众-对我们来说,额外部署50 MB的运行时程序不起作用)。毫无疑问,如果您的应用程序需要重要的插件功能,则Equinox是一个美妙的东西(当然,您也可以使用JSR 296运行Equinox,或使用类似于OSGi推广的Whiteboard模式的设计模式)。

是的,Netbeans RCP 的学习曲线陡峭。而且,由于某种原因,他们喜欢使用其他人都不用的奇怪设计模式。但是:自以上帖子以来,它已经极大地改进了:大多数 xml 文件被简单的注释所取代,向导仍然存在,但您不再必须使用它们。并且出版了很棒的入门书籍(例如,https://leanpub.com/nbp4beginners)。 - Jirka
@KevinDay 有更新吗?看起来 MyDoggy 没有维护了,JSR 296 已经死了。今天我们有什么选择? - user3111525
@user3111525,那真的是个十亿美元的问题... 我现在仍在使用JSR296和JSR295。如果我从头开始做一个项目,我会认真考虑JavaFX。 - Kevin Day
MyDoggy在Java世界中是根据LGPL许可证授权的,但在Apache-2.0下是非常悲伤的:https://opensource.stackexchange.com/a/5756/7870 - kravemir

4

我有使用Eclipse RCP的经验,并且会推荐它。

优点:

  • 组件 - 组件/插件模型允许重复使用。
  • 使用SWT和JFace,使UI看起来像本地应用程序。
  • 可插拔的视图、编辑器和透视图使布局易于配置。
  • Eclipse扩展点使扩展和与第三方API和工具集成变得容易。

缺点:

  • 学习曲线较陡峭。

如果您选择Eclipse RCP,请一定获取这本书,当您刚开始使用该框架时,它是无价之宝:http://www.amazon.com/Eclipse-Rich-Client-Platform-Applications/dp/0321334612


3
我目前正在开发一个Spring RCP应用程序。文档确实很薄弱,但博客和论坛有足够的信息让你开始。一旦你开始启动,事情会相当快速,并且如果你不熟悉该框架,你只需要学习基本的Spring知识。与Spring库(如VLDocking)的集成也非常好。
我认为如果您的用例是开发一个独立的Java桌面应用程序,则Spring Rich非常棒。我的意思是,如果您不需要分发模块并进行在线更新,那么它应该能够满足大多数需求。

1
我想提一下,富客户端开发人员最近已经将RCP代码移植到一个名为“Valkyrie”的新项目中,引入了几个更新和增强功能。 代码可以在这里找到 - http://www.gitorious.org/valkyrie-rcp - 这里有更多信息的线程 - http://forum.springsource.org/showthread.php?101299-Trying-out-a-new-route... - 我在过去的一周里一直在尝试这个框架; 到目前为止看起来很棒,示例应用程序也非常好。 - Andrew B

1
Netbeans RCP非常优秀。多年来它已经发展了很长一段路程。它使用了更加健壮的技术(“Swing”),许多人都在使用和理解它。Eclipse RCP(更具体地说是SWT)让我感到困惑。

1

从我的终端用户角度来看。

我在Eclipse中看到的实现比其他两个平台更多。实际上,我知道Netbeans的实现,但从未亲手使用过。

这是我第一次听说Spring。

虽然我的回答肯定是一个超级高层次的观点,但它反映了行业对使用其中一个的偏好。

此外,差异与平台可用时间成正比。请记住,Eclipse创建SWT以解决Java Swing在1.3版本中遇到的问题,因为它非常缓慢。

Netbeans受到JVM改进的很大好处,现在运行非常快。

Spring还很年轻(与其他两个相比),但通常新事物会从前者中学习,机会更简单易用。

这里有一篇关于这两个平台Eclipse RCP vs Netbeans RCP的文章,可能会有所帮助。

http://blogs.oracle.com/geertjan/entry/eclipse_platform_vs_netbeans_platform


1

虽然我没有明确使用过它们,但我已经使用了Eclipse RCP的部分内容。具体来说,我使用了Eclipse OSGi运行时(Equinox)和一些常见的实用程序,我非常满意。OSGi非常好用。我有几个朋友在使用Eclipse RCP的大型合同上(比我使用的还多),他们对此赞不绝口。

如果我的项目中没有大量遗留的Swing,Eclipse RCP将是我的首选。OSGi真的很有趣!(我想Spring也使用它,不过我还没有检查过)


1

当然,这一切取决于您想要提供的应用程序和服务类型以及目标环境。但我也可以推荐OSGi作为开发和部署平台。其基础架构和规范非常成熟和可靠。

除了Eclipse RCP之外,您还应该看看Apache Felix(http://felix.apache.org)和Knopflerfish(http://www.knopflerfish.org),它们是(较小的)开源OSGi框架实现。


0

还有基于反射的UI生成和定制。

与其自定义一个适合你需求的IDE,不如定制一个默认生成的GUI。尝试一种新的方法可能会很有趣。

https://github.com/dotxyteam/ReflectionUI


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接