构建富web应用程序的选项是什么?



我正在开发一个客户端Java应用程序,我想为此创建一个基于web的用户界面(将从本地应用程序提供给浏览器)。冒着过度简化的风险,它是一个微博工具,将支持类似Twitter和Facebook的功能。它是开源的,你可以在我们的wiki上阅读更多。

重要的是,这个应用程序是非常容易使用,我也希望它看起来好相对于当代网络应用程序(如在Chrome网络商店提供的例子)。因为我不是一个网页设计师,我希望使用工具,给我一个有吸引力的UI"开箱即用"。哦,我需要保持可分发文件相当小(因此我使用的任何文件都需要相当轻量级)。

到目前为止,我已经看了Sproutcore和GWT。

Sproutcore应用程序确实具有我所希望的外观,但我对JavaScript不太熟悉,经过一些实验后,我不完全清楚如何实现我认为我需要的一些更复杂的功能。

作为Java, GWT更适合我的舒适区,但是我花了很长时间才把我的开发环境设置好。似乎GWT想要决定我的应用程序的结构,但由于用户界面只是其中的一小部分,我不愿意围绕GWT构建整个应用程序。

我一直在考虑的另一件事是使用CoffeeScript(这似乎比JavaScript更容易接受,而且有Maven构建器),也许与JQuery-UI一起使用。

我应该考虑哪些其他选择?

推荐两大javascript框架Sencha和Cappuccino。

它们具有广泛的现成UI工具包。后者内置了一个MVC框架,前者内置了一个通用的JavaScript库。我强烈推荐这两本书。

同样推荐jQuery UI是一个合理的工具包。我个人会将Sencha与它丰富的UI工具包和轻量级MVC框架(如Backbone)结合起来。恐怕这需要好好学习JavaScript。

您也可以主要从服务器驱动JavaScript UI工具包,而跳过客户端MVC。为此,sencha应该作为UI工具包出现,但如果您想要有意义的功能,则需要更多的结构。我还推荐RequireJS用于模块化文件管理。

看一下Vaadin,它基于GWT,但更容易使用。我用了2年了,我也不是设计师。

看看jQuery &jQuery UI (jQuery module,如果你想部署到手持设备)

此外,由于您提到您不是设计人员,您可能希望以MVVM模式实现前端,以将UI与应用程序的业务逻辑分开。Knockout是一种使用减速数据绑定的好方法

我不喜欢编写纯JavaScript,所以我将告诉您一些基于Java的框架。最近,我选择了Google Web Toolkit

优点:

  • 大量材料
  • Eclipse + Google plugin
  • 非常直观的API
  • 第三方库
  • 花哨的小部件+优化的JavaScript
  • 大量泛型
  • 非常活跃的社区
  • 异步回调

缺点:

  • 非常慢的调试,迟早会让你抓狂
  • 这么年轻的框架有很多弃用的代码

百感交集:

    你不必编写声明式UI(你可以做类似swing的开发),但是你的代码变得越来越大,越来越难维护,所以很有可能你最终会学习一些声明式UI,比如UI Binder
  • GWT的可视化设计器很好,但是非常不稳定 (eclipse):(

一些注意事项:

vadin 做一些原型。尝试一些调试。然后在类似大小的项目上尝试GWT和调试。考虑调试非常重要的决策因素,因为GWT调试是最让我沮丧的事情。

考虑JSF +一些很好的富组件框架,如RichFaces, IceFaces, PrimeFaces等(但如果你真的在乎的话,你的应用程序就不会再"轻"one_answers"小"了)。确保完全适应环境(IDE +插件),没有什么比JSF更好的了(我今天会选择RichFaces + Seam,如果完整的Java EE是选项)。

如果你不想学习javascript,我建议你使用Sencha-GWT (GXT) GWT,你可以用java语言开发所有的应用程序,也可以用java调试你的代码。

使用这种技术创建web应用程序非常容易,并且提供了javascript版本中几乎所有可用的功能。

您还可以将它与hibernate和giled混合使用以持久化您的数据,并且giled可以帮助您序列化hibernate对象。

我一直在用SproutCore为前端和Java后端编写一个应用程序。在我看来,这是完美的。

如果请求是XHR或普通的请求/响应,后端可以不再担心客户端的HTML和JavaScript内容。我可以使用普通的Java servlet实现后端,并且只关心在客户机和服务器之间传递的数据(大部分是JSON)。

客户端变得快速和响应,SproutCore有丰富的组件,你可以混合和匹配。

所以换句话说,使用SproutCore(和Cappuccino和其他全面发展的MVC JavaScript框架),你可以让你的客户端做它最擅长的事情:渲染和显示HTML, CSS和JavaScript,而让你的服务器担心它最擅长的事情:检索,存储和更新数据。如果你感兴趣,这个项目的源代码可以通过GPLv3许可证获得:https://github.com/joachimhs/EurekaJ

我在这里写了一篇关于服务器端MVC和客户端MVC之间不同方法的文章:http://haagen.name/2011/05/24/The_RIA_MVC_Model.html。

SproutCore也带有MIT许可,所以它可以不受任何限制地使用。

最新更新