88

这是一半的咆哮,一半的问题。

值得使用 Grails 吗?我正在尝试开发一个相对简单的数据库驱动的 Web 应用程序。我的专长是 Java,所以自然而然地,Grails 似乎是一个不错的选择。起初我想使用 Spring、JPA 和 Hibernate,但我以前使用过,并且遇到过各种繁琐的配置和编码工作。Grails 宣称自己解决了这个问题。

我对 Grails 最大的失望是所有的小事情都不起作用。我的意思是它不像人们直觉认为的那样有效。边缘非常粗糙。我经常遇到问题。有时是因为我缺乏对 Grails 的理解——有时我发现了合法的 Grails 错误。

一个主要问题是缺乏良好的 Eclipse 集成。有一个 Groovy 和 Grails 插件,但除了语法高亮之外,它并没有做太多的事情。从 Java 调用 Groovy 以及反之,配置起来非常痛苦。没有良好的 IDE 支持是一大遗憾。

发生的事情是我坐下来尝试开发我的 Web 应用程序。一天结束时,我意识到我花了大约 85% 的时间来调试与 Grails 相关的问题。如果不是 Eclipse 问题,那么它就是急切加载在视图中获取、一对多关系奇怪的空文件错误行为奇怪的属性/getter 错误——它会一直持续下去。这只是我今天遇到的问题的一个示例。我上一次与 Grails 的讨论产生了一大堆不同的问题。

我有时想知道这是否值得。我很好奇其他人是否经历过这种情况。真的有人使用 Grails 来高效地开发 Web 应用程序吗?我应该考虑其他用于快速 Web 开发的框架吗?

4

15 回答 15

85

我们有一个由 12 人组成的团队,他们都是经验丰富的高级 Java 开发人员,他们从 0.6B 开始学习 Grails,而且我们都仍在从事基于 Grails 的项目。我不会心甘情愿地回到 Java,我们都松了一口气,因为我们已经打破了如何使用 Grails 应用程序快速到达某个地方的问题。

这是一场斗争,这并不容易,并且有/有挫败感。

尽管如此,鉴于我们不断的努力,我们很快就交付了一些东西。有一些错误,许多都有解决方法。

我听说过几个擅长 Java 的开发人员试图深入研究 Grails 项目的复杂咒语。我们避开了所有 Java,转而使用纯 Grails 和 Groovy。我们确保从简单开始,尽可能以可管理和实用的方式构建复杂性。我们不敢深入研究,希望我们的 Java 知识足以支撑我们。

我们最终创造了一个巨大而复杂的东西,它运行得非常好,而且比编写纯 Java/Spring/Hibernate 版本快得多;那就是没有像样的 IDE 支持,而且在错误方面的情况比今天要糟糕得多。

关于 Eclipse 支持,唯一真正用于 Grails/Groovy 的 IDE 是 Intellij - Eclipse 支持远远落后,遗憾的是:我是 Eclipse 爱好者,远非 Intellij 转换 - Grails/Groovy 支持将其他一切都吹走尽管。

是的,与 Spring 相比,Grails 可能还不成熟。或休眠。我敢打赌,在他们存在的最初 1.5 年里,他们同样充满了问题。

既然如此,那么您有责任,注意将复杂性保持在最低限度,仔细测试(在我们看来)并逐渐谨慎地建立复杂性。

一旦在堆栈中涉及 Spring/Hibernate,Java 就没有快速的代码解决方案。Grails 所体现的复杂性反映了 Spring/Hibernate 自身的复杂性。如果你觉得你的时间最好花在纯 Java 上,我不会反对。我仍然有我的 WTF,但现在陡峭的学习曲线已经过去,我想我会更多地坚持使用 Grails。

于 2008-12-29T08:02:59.763 回答
36

我非常喜欢编写 Grails 应用程序,原因有两个:

  • 我不必使用 Java
  • 我可以使用 Java

我认为在熟悉 grails 之后,他的工作会非常快速而优雅地完成。

这么多的好处。不利的一面是性能,它在两个方面打击了我:部署和测试驱动开发。

我没有设法在单个(租用的)服务器上运行超过 3 个 grails 应用程序,因为我很快就达到了内存和性能限制。包含的框架太多了。

另外,grails 的测试运行者不值这个名字。当我运行单元测试时,它们应该在瞬间完成,而不是 10 到 20 秒。所以我发现自己一直在用纯 Java 编写业务逻辑,因为我可以更快地测试它。但我想这可以通过更好地集成到 IDE(eclipse)中来解决。

于 2008-12-29T20:34:44.270 回答
10

我认为 Spring 对 Grails 的支持将是一个巨大的推动力。如果有人可以在网络上将其移过 CRUD,那就是那些人。

我也认为它正在达到临界质量。有几本新书将在 2009 年上市。我认为这些将有助于提高采用率。

于 2008-12-29T14:46:17.670 回答
9

我完全同意原始海报的观点。

我们是一家 Java + Spring 商店,并借此机会试用了 Grails。我们首先创建了一个非常小的测试应用程序,结果证明它非常简单并且运行良好。我们在这里遇到的主要问题是由于我们对 Groovy 和 Grails 缺乏了解。

在这次成功(信心提升)之后,我们决定尝试一个稍微大一点的项目。这是一次更加痛苦的经历。正如其他人所提到的,我们发现了各种表面上没有立即显现的错误和问题。应用程序重启周期变得非常痛苦,除非你有很好的测试覆盖率,否则进行任何形式的重构都是一场噩梦。

真正令人沮丧的是代码失败而没有一条错误消息!它只是不起作用,你不知道为什么?

我喜欢 JMS、Quartz 和 Remoting 等插件的易用性。消除了许多乏味的 XML。

尽管我们也遇到了一些问题,但我几乎喜欢 GORM 的简单性。

我不喜欢 Groovy 类型松散的特性,而且您必须运行应用程序才能捕获一堆错误,这让我想起了 PHP 或 Rails。

归根结底,我们问自己是否有可能使用 Grails 编写一个复杂的可管理软件......

我们有一个即将投入生产的 Grails 应用程序......所以我们拭目以待。

于 2009-05-05T14:52:38.077 回答
7

我在 Ruby on Rails 方面的经验比我在 Java 世界中的任何经验都多,所以我从不同的角度进入。总的来说,GrailsRails 更粗糙,部分原因是它的不成熟,部分原因是它依赖于两个极其复杂的底层框架(Spring 和 Hibernate)。Rails 还有一个更大的社区。

但是,Groovy 作为一门语言已经取得了长足的进步,使用起来很愉快。由于在 Groovy 1.6 中所做的改进,Grails 比 JRuby on Rails 快了很多,并且您通过 GPath 获得了非常好的 XML 支持。使用 JVM 可以获得很多不错的功能(例如并发性和大量线程安全代码),但不必纠结于 Java(我不太关心的一种语言),所以我真的有很难说服自己在 MRI 上使用任何东西。

不过,我必须承认,Python 看起来很诱人。

至于你的 Eclipse 问题,我无能为力。我使用 Vim 和 Emacs,主要是因为我无法忍受使用 IDE。不过,对于像 Groovy、Ruby 和 Python 这样的动态语言,我认为 IDE 并没有真正带来任何真正的好处,因为实际上没有任何地方可以生成代码,也不需要编译。也许尝试在没有 IDE 的情况下工作一段时间,看看事情是否更顺利?

所以,是的,我认为 Grails 是值得的。他们在让事情尽可能快地工作方面做得非常出色,而且 Grails 和 Groovy 团队都非常非常敬业。

于 2009-04-04T04:42:00.263 回答
7

我们在 web 层使用 grails + 在服务层使用带有 hibernate 和 spring 的 java。它是经典的三层(网络、逻辑、数据),其中网络是 grails,逻辑是用 java 实现的。与 java 中的惯例一样,我们使用 bean 对象来表示不同层之间的数据。

它工作得很好,它是我们案例的最佳解决方案,因为 bean 对象已经存在,以及数据库结构。根据我们的经验,我认为 grails 作为 Web 表示层具有很大的价值,但我会坚持使用 java 来编写业务规则并持久化应用程序数据——因为 grails “是”java,所有 grails-java 集成都很漂亮直截了当。

我们使用 eclipse 来开发 grails 应用程序,它的集成很差,正如人们在这里所说的那样。但是,作为其他开发人员的建议,我们从命令行运行 grails 应用程序,并且只使用 eclipse 来保存源文件,并且它工作得很好,因为应用程序是即时更新的。

除了在表示层之外,我还觉得在其他地方使用 grails 不是很舒服。

于 2009-02-27T06:24:02.743 回答
6

我完全和你在一起!Grails 的边缘仍然感觉如此粗糙,以至于将它与 Rails 进行比较几乎是一个笑话。如果至少错误报告好一点。但我想这也可能是由于它在幕后使用了大量的库。一个词:堆栈跟踪!我也不喜欢 model->db 方法(Rails 有 db->model)。脚手架也留下了很大的改进空间。然后“不需要重新启动”也不能像宣传的那样工作。(我不确定更糟糕的是什么 - 必须一直重启,或者有时会发现重启后会消失的奇怪行为)并且不要让我开始使用 GORM。(如果需要几个小时才能找到一个简单的 SQL 方法,您就会开始怀疑整个 ORM 是否真的可以节省您的时间)也许只要它很简单。

我的意思是:当您来自 java 世界时,它仍然是框架的更好选择之一。(那里有很多无用的废话,自称是一个 Web 框架)......它有潜力。我只是希望它不会建立在这么多其他复杂的东西之上。

无论如何-让我们希望这些事情得到解决。目前我正潜伏在playframework.org上,它看起来也非常漂亮和有前途。

于 2009-01-10T00:15:02.430 回答
4

我发现 Grails 的最大优势是我不必再关心数据库了——模式是自动创建/更新的,并且持久性主要为我完成(不再编写 SQL 查询)。这是一个巨大的解脱。另一件相当不错的事情是,一旦您确定了控制器和视图的模板,添加新的域对象非常快。尽管我怀疑您至少会对您的视图进行持续的更改,将它们重新安装到现有的视图中。

至于 IDE - IntelliJ 似乎是最好的选择,但我很高兴使用 Netbeans 6.5。我使用 MyEclipse 进行所有其他开发,但 Netbeans 现在有了更好的 Grails 支持。

于 2009-01-19T15:51:09.887 回答
4

当他们完成 eclipse 插件时,这将是值得的。我说的越早越好。在这种情况发生之前,试图向我的老板推销 groovy 并不容易。

于 2008-12-29T20:08:54.477 回答
3

我刚刚开始在一个新项目中使用 grails……不必编写任何 xml 文件,但仍然拥有 Spring 的强大功能,Hibernate 真的很棒。

虽然在 IDE 中使用 IntellijIDEA,但我实际上是通过 IDE 发现了 Grails(不过我可能有偏见,我讨厌eclipse)。

于 2009-02-26T21:12:24.880 回答
3

在开始使用 Grails 之前,我是 Eclipse 用户。很快就很明显这不会削减它。所以我尝试了 Intellij 和 NetBeans。就 Groovy 和 Grails 而言,当时 Intellij 更好。但是,NetBeans 是免费的,这对我来说已经足够好了。从那时起,这三个人都发布了新版本或新插件。由于 Intellij 的成本,我仍在使用 NetBeans。随着 Spring Source 对 G2One 的收购,期望之一是 Eclipse 中对 Groovy 和 Grails 的更多支持。这对于提高采用率是必要的。

将 Grails 用于新项目非常棒。不再需要如此多的 Enterprise Java 包袱。我可以想象尝试移植某些东西会很困难,因为在您了解框架的优势和劣势之前,很难有效地利用它。承诺在 Grails 1.1 中对 JSP 的支持会变得更容易,我不知道在尝试探索新框架的同时使用 beta 版本是否是个好主意。测试还经历了新版本的重大修订。如果时间允许,您可以考虑等待,因为 1.1 版本应该很快就会发布。

如果您有机会在从头开始一个项目时在不同的 IDE 中尝试 Grails,我想您会以不同的眼光看待它。

于 2008-12-30T13:44:40.167 回答
2

完全。Java 框架如此之多,以至于为新手设置了相当高的标准,这证明了 Grails 能够在如此拥挤的空间中脱颖而出。

它仍然有一些锋利的边缘,但它们被磨平只是时间问题,底层项目非常值得。

于 2009-01-15T23:38:43.467 回答
1

Grails 可能对于您的应用程序类型来说太大了(基于它在第一次初始化时创建的大量文件以及它所占用的资源)。如果您正在寻找简单的东西,Grails 可能不是您想要的。如果您正在寻找简单且有效的东西,那么到目前为止,我认为 django 可以很好地完成您的工作。看看从它的教程创建一个 CRUD 应用程序是多么简单(它需要多少文件) 。从这里开始,您的应用程序可以(相对)轻松地随着您的需求和要求的增长而扩展。

于 2009-07-21T11:30:00.123 回答
0

我不确定他们是否能够正确地制作 Grails。正确地说,我的意思是解决所有细节(小细节和大细节),这些细节最终使它变得脆弱和脆弱。我什至不确定背后是否有一个真正的开发团队(意味着超过 2 人)。

每次我迭代我的 Grails 项目的一个特性,试图改进某些东西时,它都是相同的工作流程:一切都崩溃了,然后是一百个“谷歌”测试周期,然后你会发现你做不到的原因你想要什么,你做别的事情。

最后,您会感到沮丧,因为您甚至不想触摸任何运行的东西。还有不好的东西,你扔掉它们!

我正在考虑通过 JRuby 切换到 Rails。这可能是两全其美的:一个强大的 Web 框架,一个活跃的大型社区,一个专门的开发团队,一个不基于像 Spring 或 Hibernate 这样有问题的复杂框架的平台,一个快速而雄心勃勃的发布周期。还有 JRuby,因为坦率地说,我背包里有这么多 Java 资产,我不能把它们扔掉。

于 2009-02-19T17:19:34.933 回答
0

如果您的专业知识如您所说的那样是Java。你应该看看Play Framework——它是一个受 Ruby on Rails 启发的 web 框架,开发周期非常短——只需保存你的 Java 源文件并更新你的 web 浏览器。如果你想尝试另一种语言,Play Framework 有一个模块可以让你改用 Scala。

我喜欢 Play Framework,因为它易于理解且性能良好。如果需要,您还可以将 JPA 和 Hibernate 用于 ORM 层。

于 2011-07-09T08:31:06.477 回答