Grails或Play!对于前RoR开发人员?

时间:2010-03-27 17:38:54

标签: java grails java-ee groovy web-frameworks

我计划开始学习Java Web框架(我喜欢Java API)我已经使用过Rails和Django。

我想要一些接近Java的东西,但没有J2EE的复杂性。

我发现了两个可能对我有用的框架:

Grails的

Grails的看起来不错,它使用的Groovy比Java的Web应用(我想..)更好,但它比基于纯Java框架(休眠,支柱,春节)看起来很简单,部署速度较慢(发送的.war没关系!),GSP很棒!这是一个有点难以调试(需要在每次修改重新启动服务器和踪迹包含Java和Groovy痕迹的混合,这并不总是最容易理解的)

播放!

这个框架看起来也很棒;它比Grails的(它使用Java)更快,但我真的不喜欢它如何使用Java,它修改源代码转换属性调用作为的setXXX /的getXXX,我不喜欢那个...这个框架也有一个缓存Grails没有的功能。我真的不喜欢模板引擎。 它也更容易调试(无需重启服务器,堆栈跟踪更清晰)

你推荐什么? 我在寻找的东西简单易学(我有很多的Ruby的经验,没有那么多的Java经验,但我喜欢的Java API),全功能(这可不是所有的Java库提供的一个问题,但如果它的捆绑和集成我更喜欢),具有良好的可扩展性并且不会太慢(比Ruby快)理想情况下我想使用一个体面的社区框架来轻松找到支持。

PS:我对JRuby on Rails不感兴趣

6 个答案:

答案 0 :(得分:29)

我从Grails切换到Play,我从未回头。我对Grails的最大问题是整体稳健性和开发人员的可用性。大部分时间我都被Grails粘在一起,因为Grails将通常的Spring MVC和Hibernate堆叠在一起,同时试图隐藏这个事实并给你一个类似Rails的API(我的个人意见)。这个问题是,一旦超出了琐碎的样本,它很容易破坏,并没有为我工作。用它开发就像走在鸡蛋上(对我而言)。每当我用Google搜索我需要的功能的文档时,我都没有被重定向到示例,教程,博客,而是向Grails JIRA解释我为什么该功能不能用于我的用例,并且该错误未解决,因为该版本之前有两个版本我正在使用。

虽然这可能不是每个开发人员的总体体验(我不是写这个来抨击Grails,而是在这里给我的经验),我需要一些帮助我的东西,不会阻挡我或者不会分解当我最需要它的时候。多数民众赞成在我发现Play时,我发现了它后迅速将我的应用程序迁移到了它(约1.0版本)。

到目前为止,这是一次很棒的旅程,在我的网络开发生涯中,我第一次停止寻找其他框架,试图找到我想要更好的东西。

如果我不得不关闭Play比Grails更好的一件事 - 至少对我而言 - 那就是Play从头开始构建,并考虑到了开发人员的可用性。它不会牺牲企业流行语的易用性。它有勇气抛弃那些不适合这种范式的东西(例如,在开发期间放弃基于Servlet的运行时间以获得更快的周转时间)。它愿意妥协,以保证令人敬畏。在我找到Play之前,这是我在Rails或Django等社区中唯一看到过的东西。

答案 1 :(得分:23)

我建议Grails。它拥有比play框架更大的社区(~350个插件几乎涵盖了所有基本需求)。此外,grails几乎完全用Java编写,它只是让您使用Groovy进行特定于域的实现。

如果遇到性能问题,即您创建的groovy页面是瓶颈,您可以随时切换到Java实现。那么你就和你一直在使用Play框架一样。你已经通过在Java中推迟编码来优化你的开发时间,直到你知道你真的需要这样做(根据我的经验非常罕见)。

我也不确定您在哪里听说需要为每次修改重新启动服务器,但事实并非如此。 Grails支持重新加载控制器/ gsps / services / domain对象等,而无需重新启动服务器。

混合堆栈跟踪可能会有点长,但工具供应商(如Intellij)最近做了一些改进,删除了你不关心的所有堆栈跟踪部分。

自从.5天以来,我一直在使用grails并且对平台非常满意。

答案 2 :(得分:3)

请注意1.1 {/ p>之后的Play! framework now supports using Scala

答案 3 :(得分:3)

根据我对Play的体验,这是一个很棒的框架。我最喜欢的功能是酷控制器系统和模板系统 - 两者都很简单,但功能丰富且功能强大。

然而,Play的最重要的好处肯定是快速的开发周期,在代码更改中几乎不需要重新加载。但如果你不小心,这种伟大将不会持续太久,而且最终会慢慢进入你的代码。

为什么? 使用Play时,常常会使用一些非常繁重的初始化插件,特别是EJB(Hibernate)和Spring。在加载新代码之前,每次更改代码时都会重新运行这些插件的初始化。因此,随着您的模型和系统配置的增长,这种繁重的初始化开始严重降低您的开发速度。在系统中,我使用20秒是在kickass笔记本电脑上运行的虚拟机上的典型启动时间。

您可以做些什么来避免这种情况取决于您的申请,例如如果您正在构建NoSQL应用程序,那么EJB插件不应该给您带来麻烦。 Spring可以替换为自定义硬编码Java插件,如果脚本性非常重要,可以更容易维护IMHO或运行Groovy脚本。在任何情况下,请注意这些问题并在年轻时将其杀死 - 并确保在每次刷新时都不要运行自己庞大的初始化。

答案 4 :(得分:1)

如果您之前使用过Ruby和Python,那么您可能会比Play更喜欢Grails。一旦习惯了这些动态语言,就很难回到Java。

答案 5 :(得分:0)

Lift上还有Scala Imho scala是最好的静态类型语言,lift是一个非常好的框架(对于静态类型语言)。