Vaadin vs. Bootstrap

我打算在客户端创建一个具有复杂表单和逻辑validation视图的应用程序。 我计划使用AJAX进行提交,并具有一些视觉吸引力。

我想要那些有使用Bootstrap和/或CoffeeScript和Vaadin开发经验的人的推荐。 我有两个选择:

  • 使用Bootstrap / CoffeeScript和服务器站点的一些框架,例如Play Framework,Rails或Django
  • Vaadin

关注我的标准与客户端JavaScript和/或HTML5validation以及使用Bootstrap编写的CSS和HTML代码中可能出现的复杂性有关。 在一个实际的ria应用程序中使用CoffeeScript而不是Vaadin值得吗? 我看到有很多人选择了Bootstrap,我确信他们有自己的理由。

帮助我做出决定。 一些相关文档也可能有所帮助。

Vaadin

Vaadin是一个非常好的工具,用于构建以纯Java开发并通过常规Web浏览器提供的交互式桌面式Web应用程序。

优点

Vaadin 6,7和8个应用程序完全在服务器端运行。 Vaadin自动将JavaScript库安装到用户的浏览器窗口中:

  • 无论服务器端应用程序告诉它,都会在屏幕上绘制。
  • 将用户操作(单击,键入等)提供回服务器以供应用程序考虑和响应。

所以没有“客户端的逻辑validation”或“html5validation”,至少不是来自Vaadin应用程序开发人员的观点。 Vaadin框架可能会在其内部实现中实现这一点,但这不是我作为Vaadin应用程序开发人员所关注的问题。 这是Vaadin的核心优势:我不关心Vaadin如何将我的表单放到用户的屏幕上。 作为Vaadin应用程序开发人员,我不会编写任何JavaScript,HTML,DOM,CSS或AJAX。 只是纯Java。

该样式类似于Swing :实例化布局 (表单),添加标签 ,添加按钮 ,添加字段 ,添加其他小部件 。 根据需要附加validation器 。 嵌套其他布局,用于复杂的表单。 所有这些都在服务器端的内存中执行,全都是纯Java。 最后告诉布局展示自己。 噗,像魔术一样,Vaadin告诉浏览器显示该forms的相似之处。

如果您想开发恰好通过Web浏览器部署的桌面式商务风格应用程序,Vaadin是一个很棒的工具。

权衡

权衡包括:

  • 服务器端有大量内存和CPU使用率。
  • 放弃对HTML / CSS / JavaScript的控制。

缩放

您的Web应用程序位于服务器上,而不是客户端。 所有业务逻辑,用户输入的数据,所有用户表单的内部表示,例如表中的行项,所有这些都存在于服务器上。 乘以用户数。 这意味着Vaadin应用程序可能需要大量内存和CPU使用率。

这可能会限制扩大规模。 但是考虑到64位Java,多个内存,以及即使是最小的机器(如Mac mini)上的多个内核,扩展也可能仅适用于最大/最繁忙的应用程序。

甚至在那些罕见的大/繁忙的应用程序中,可能有办法处理Vaadin中的缩放。 所有应用都存在于Servlet会话中。 某些Web基础结构允许此类会话状态在服务器之间移动,甚至可以保留到存储以供其他服务器选取。

或者您的应用可能会很好地扩展 已经完成了11,000个同时客户端的模拟。 看到:

  • Vaadin可伸缩性研究 – QuickTickets (公司博客文章)
  • 使用Arun Gupta 与Vaadin和WildFly网络研讨会进行扩展 (video演示,YouTube)

控制HTML,CSS,JavaScript

如果您的团队对传统的Web应用程序架构更加舒适或经验丰富,那么Vaadin可能不适合您。 在Vaadin中,您完全使用纯Java编写应用程序,Vaadin会自动将其转换为HTML,CSS和JavaScript。

你可以稍微调整一下CSS。 即使没有触摸CSS,如果您希望覆盖默认值,Vaadin的“主题”( Valo , Reindeer )可以让您对颜色,大小和字体进行更多控制。 但要知道Vaadin在生成HTML和CSS方面处于“驾驶员座位”; 你是乘客,只允许一点点“后座驾驶”。

如果您的目标不仅仅是开发桌面式应用程序,那么如果您完全控制HTML / CSS,那么Vaadin可能不适合您。


更新

Vaadin 8发布

2017年2月22日, Vaadin 8发布 。 最大的增强function是利用现代Javafunction重写数据模型和数据绑定API,例如带有类型参数和lambda表达式的generics。 此外,内存和CPU更高效。

Vaadin 7发布。

虽然与Vaadin 6大致相同的架构,但7比以往更好。 请参阅: 新function 。

我会使用Rails 3.2 + Bootstrap + Backbone.js,我们在这里使用的堆栈。

  • Rails :漂亮的社区,坚实的平台,非常容易开发,可以部署到Heroku(上帝保佑Heroku)。
  • Bootstrap 2.0 :兼容HTML5,开箱即用的function,良好的社区(只需查看他们的github页面),明智的js插件。
  • Backbone.js :非常适合客户端繁重的应用程序,与堆栈的其余部分(特别是jQuery)配合使用,在使用正确,不引人注意的情况下提供良好的用户体验。 特别适用于动态表单,因为您可以使用专门的视图(自动复合,具有多个项目的表,相关的选择框等)重构大量代码。

至于文档,Rails和Bootstrap都是顶级的,你可以找到很多关于它们的书籍。 Backbone.js尽管拥有庞大的用户群,但更专业,但你仍然可以在网上找到很多好的截屏和电子书(我推荐peepcode和thinkbot的作品)。

祝你的应用好运!

PS:使用Rails的另一个好处是你可以使用的gem和插件集。 全文搜索? 太阳黑子。 审核和版本控制? PaperTrail。 BDD? 黄瓜。 我建议你查看Ruby Toolbox网站。