72

我知道这是重复的,但是自从一年多前提出这个问题以来,Grails 世界已经有了很大的发展,Eclipse 中的 IDE 支持也是如此,所以请不要盲目地关闭它。

我认为答案是肯定的,并且已经开始使用Grails 1.2.0开展一个新项目,并且对STS Eclipse Integration中的 Groovy/Grails 部分感兴趣。

我认为这个问题值得在 Grails 进化一年之后重新审视,当时答案肯定是混杂的。

因此,作为一名经验丰富的 Java Web 开发人员,我有这些问题,并且希望我的假设受到挑战:

  • 与 Ruby 相比,Grails 现在值得还是自己动手?
  • 它克服了错误的开始吗?
  • 它真的能带来快速发展的好处吗? (我承认我现在很挣扎,我已经通过了广泛的基线配置来制作我的定制应用程序,它不是面向列表和页面的)
  • 它是否适用于现实世界的生产应用程序? (感觉很重)
  • Eclipse 插件是否比以前更好并且适合目的?(我认为还没有)

谢谢

编辑: 我边走边学,对于使用框架而不是框架功能本身,我有一些重要的抱怨。我之所以添加这些,是因为我认为它们应该是考虑因素,并且基于我的经验和观点,并且可能会帮助那些试图决定是否去圣杯的人。我也可能表明我对框架缺乏经验,所以这些都不是彻头彻尾的批评。我是一位经验丰富的开发人员,这就是我发现的:

调试真的很难。事实上,这几乎是不可能的,尤其是作为框架的初学者,这时你最需要你信任的调试器朋友。我花了比我应该的更多的时间来追踪代码中某些部分的语法错误问题,这些问题与引用域字段有关,这些域字段会导致堆栈中某处的静默失败。

坦率地说,日志记录很糟糕。你有两种模式,“没什么用”和“大量无用的东西”。单页请求后,我的调试日志为 128Mb,并且不包含任何关于我的错误的信息。在我看来,整个日志记录问题需要在框架中重新考虑。

STS Eclipse IDE 价值不大。除了语法高亮之外,它没有多大用处。您无法调试代码,因此它是一个美化的编辑器。代码提示不完整,据我所知,根本没有 GSP 支持。它也是我桌面上最慢的 Eclipse 插件 - 大约需要 2 分钟才能启动。它慢得令人震惊。我已恢复为文本编辑器(您会注意到所有在线教程视频也都这样做)和一些自定义语法高亮显示。

我对性能有一些严重的担忧。说得太早了,但我已经发现自己因为休眠而调整了数据库。也许这是意料之中的,但我确实必须保持我的域模型简单,以便约定产生高性能查询。

最后一个,逻辑域模型和物理数据库模型应该相同的约定不是明智的默认设置,在现实世界中也不太可能出现这种情况。我知道您可以将两者分开,但它会产生一定程度的复杂性,我认为如果扩展约定可以避免这种复杂性。没有足够的关于组合的文档以及你需要做些什么才能使其在实践中发挥作用

4

21 回答 21

56

我已经使用 Grails 超过 4 个月了,我将尝试向您介绍我对 Grails 及其可用性的个人感受。

Grails 现在是否值得与 Ruby 或您自己的其他产品相比?

当然,答案不是“是”或“否”,而是视情况而定。这取决于您的要求(您需要在 Java World 中吗?),也取决于您的偏好(您是否更喜欢面向领域的开发,您是否更喜欢 Groovy...)?但是,我可以回答 Grails 是 Rails 的一个重要替代品。我相信无论您的 Rails 应用程序是什么,您都可以使用 Grails 来完成。但根据项目的性质,可能需要更多或更少的时间。同样,如果您熟悉 Rails 但不熟悉 Grails,那么 Rails 是更安全的选择。

它克服了错误的开始吗?

的。如果你看一下我最初的消息(在这个网站或其他网站上),我会抱怨很多关于 Grails 的错误。但是,您只需要记住 Grails 在边缘上有点粗糙(例如,没有过多使用域继承),并且一旦您熟悉了该框架,您就不会遇到太多糟糕的惊喜。我并不是说 Grails 不是错误的。它肯定不仅仅是 Rails。而且,它比 buggy 更有用。一条建议:使用尽可能少的插件。因为它们中的许多都是越野车,有些相互之间不兼容。因此,除非您确定 grails 插件是最新的、非侵入式的并且(由您自己)测试过,否则不要包含 grails 插件。

它真的能带来快速发展的好处吗?

的。您几乎不需要处理数据库设计。由于约定优于配置,配置几乎从一开始就为您完成。您的应用程序易于维护。我看到的唯一缺点是前端开发不如其他技术(如 Rails 或 ASP)丰富

它是否适用于现实世界的生产应用程序?

我不能说,因为我还没有上线我的网站,但我非常有信心,因为sky.com正在使用 Grails,并且这些网站吸引了大量流量——每天大约 700 万页面浏览量。同样,性能很大程度上取决于您的应用程序架构和设计决策。

Eclipse 插件是否比以前更好并且适合目的?

不知道。我正在使用 IntelliJ,但根据我在 Grails 领域看到的抱怨消息,我想它并不比一年前好多少。

我希望它有所帮助。

于 2010-01-13T09:22:57.130 回答
41

最近开始了一个Rails项目,一直在用Grails做一些事情。

我对Rails的主要看法是,有很多东西对开发人员来说是完全不透明的(我讨厌),当你开始添加更多的插件/生成器/库/etc 时,这种情况往往会增加,因为为了将它们结合起来你需要修补一些东西。你会觉得rails+plugins只是一个巨大的 DSL hack,如果你使用了一些错误的plugins+versions组合,它就会开始崩溃。

使用Grails,虽然生态系统要小得多,但一切都趋于相对一致。DSL 方法不是很常用,通过使用传统但无聊的设计(我的意思是使用类、接口等而不是 DSL),更容易理解管道的工作原理。

进行一对一比较,情况如下:

  • 语言实现:我更喜欢 Ruby 而不是 Groovy,尽管我不太了解 Ruby。Groovy 感觉像是一种好用坏实现的语言,其中一些特性被焊接在语法之上。我指的是一些特殊的类,它们似乎只是为了允许一些黑客攻击。
  • 框架特点:Rails 在这方面遥遥领先。您可以通过多种方式配置 Rails 的大部分方面(例如:布局、模板、css/js 打包器、验证、测试框架等)。Grails 在这方面落后,尽管它对于大多数用例来说足够灵活。
  • 插件:Rails 有大量的插件,可以看作是祝福或噩梦。有些插件没有维护,有些插件不能很好地使用某些功能或插件,并且有很多分叉。我正在学习坚持使用基本和最常用的插件(authlogic、haml 等) Grails 具有出色的基础插件(授权/身份验证、ORM 等)和其他一些用于较小内容的插件
  • 测试:Rails 有很多测试方法,但这不一定是好的。一些测试框架不能很好地与一些插件等配合使用。Grails 的测试插件较少,但它们倾向于更好地与一些主要插件集成(因为没有那么多插件可以集成)
  • 数据库:到目前为止, Grails 胜出。
    • 我更喜欢为我的域类建模而不是破解我的数据库。
    • Hibernate(在引擎盖下使用)与 Rails 对应物相去甚远。虽然有 Rails 的数据映射器(本质上更类似于 Hibernate 而不是 ActiveRecord),但我觉得它还不够成熟。Grails 还通过插件进行迁移。
    • 你有很好的 Hibernate 缓存实现(JBoss 缓存、EhCache 等),可以通过屋顶提高你的性能
  • :我觉得 Ruby 有很多用于 NoSQL 或云服务等新东西的库,而 Java 有大量用于 Excel 处理等旧东西的库。不要忘记 Java 库通常比 Ruby 快得多
  • 前沿:Rails 更加炒作,这意味着它背后有更多的资源。这意味着,如果您尝试将 MongoDB 或 Riak 与 Rails 集成,那么有人已经做出了很好的改变。Grails 落后,主要是因为它不是那么受欢迎,所以社区倾向于专注于解决日常问题,而不是使用所有前沿的东西,比如 NoSQL 等

这是一个例子:

  • 大多数 grails 插件以模型和/或服务的形式生成代码。其余的通常由图书馆处理。您可以检查模型/服务代码,查看它的作用并进行更改。
  • 大多数 Rails 插件通常与 Rails API 挂钩,这意味着您最终会调用一些函数或包含一些模块,然后使用插件自己的 DSL。这在它工作时效果很好但当它坏了时,它很可怕,你最终不得不修补一些东西,或者安装不同的插件或插件版本。我猜一个经验更丰富的 Rails 开发人员对此更满意,但我不是。

结论:

  • 如果你想要最前沿,不介意偶尔打补丁,支持大型社区和/或不介意使用 ActiveRecord 风格的数据库,请使用Rails。此外,Ruby 作为一门语言非常优雅
  • 如果您更喜欢类接口设计而不是 DSL,更喜欢通过模型对应用程序建模,不需要精致的功能并且熟悉 Java 生态系统,请选择Grails
于 2010-09-05T12:49:26.030 回答
17

这是非常值得的!

我们在几个项目中使用 Grails,所有这些项目都取得了巨大的成功,原因如下:

  • 简单 - 这是我们使用过的最简单的框架之一

  • 遗留代码重用 - 我们所要做的就是获取遗留代码并将其放在 lib 或 src 文件夹中,然后就完成了。对我们来说太好了。

  • 遗留数据库结构 - 如果您想在遗留数据库上生成数据可视化,这是一个很棒的工具。

现在,关于可行性:

  • 错误:自 1.1 版以来我们没有遇到太多错误(1.0 版对我们来说太错误了)

  • 工具:Netbeans 在这方面确实有所改进,但它甚至还没有接近 Intellij IDEA 等其他工具(大力支持!)。Eclipse 也是如此。

  • 可移植性:我们的项目从未遇到过任何问题。

于 2010-01-13T15:06:56.747 回答
9

我们现在有六个 Grails 应用程序在生产中,虽然 Grails 不同于 Java 框架并且需要一些学习时间,但它已经得到了回报,因为我们使用了敏捷技术。细节:

  • 我们使用 IntelliJ。它不是很贵,并且在几周内为我们收回了费用。
  • 对于所有动态语言代码,自动化测试、持续集成和重构是必须的。如果你已经练习过 TDD 或者至少有一个不错的测试代码覆盖率,那么它不会增加任何额外的工作。
  • Grails 默认带有 Hibernate,但您可以使用其他持久性框架。今天还有 5 个持久性插件可用
  • 在 Graeme Rochers 看来,伐木显然不是一个问题,但它已经稳步改善。不过,我没有遇到未记录错误的问题(您必须确保在代码中正确捕获异常)
  • 调试显然不在雷达上(但这并没有改善)。无论如何,我们不依赖调试。

这就是说,与所有新技术一样,我建议制作原型、代码审查、结对编程,也许还可以使用一些咨询。

于 2010-07-19T13:24:36.293 回答
7

这是非常值得的。我已经使用它一年多了,并且喜欢它。我过去常常回避这些类型的 rad 工具,但它改变了我的工作方式。在 1.2 版本中,它通过更好的堆栈跟踪信息变得更好(特别是对于 GSP)。

我在缩放方面遇到的唯一问题是休眠和缓存,这实际上不是 grails 问题。即使是我一般不喜欢休眠的那些,grails 用 GORM 包装它的方式对我来说也是一件艺术品。标准闭包方面非常适合使用。

于 2010-01-22T21:26:44.690 回答
6

我还没有找到同时精通 Grails 和 Rails 并且更喜欢 Grails 的人。

如果您对两者都很了解,那么您几乎可以肯定更喜欢 Rails。

Grails 通常会吸引那些害怕平台变化的 Java 开发人员。

在这种情况下,我认为 JRuby 可能是在老化的遗留 jvm 上采用敏捷方法的更好方法。

于 2010-11-30T21:17:50.930 回答
5

最近在一个项目中使用了 Grails,我想分享我们与标准 J2EE 应用程序开发相比的经验。

它真的能带来快速发展的好处吗?

确实,确实如此。即使提早离开脚手架路径并根据自己的需要重写约定,启动时间也很短,因为我们不必关心许多不同的技术。这种轻量化让我们的工作不仅更快,而且更精准、更干净。

编写标签从未如此简单——在 JSF 中,我们首先考虑是否值得付出努力,而在 Grails 中,我们只是这样做。工作测试驱动并实现高覆盖率也很容易,尽管不同的测试用例和模拟策略有时不一致和错误。

从 Java 切换到 Groovy 是一种极大的乐趣,我们喜欢使用列表和映射文字、闭包、构建器,以抛弃我们在 Java 中的样板“映射”实现,并编写紧凑、有意义和专注的代码。

减慢开发速度的是不那么完美的 IDE 支持,这也适用于我们使用的 IntelliJ 插件。散布在不同地方的糟糕的、通常是旧的甚至是错误的文档(违背了“搜索结束”的承诺)也阻碍了快速发展。所以我们经常不得不退回到源代码阅读——随后被底层的 Spring 类层次结构吓到了。

于 2010-07-21T08:34:54.437 回答
5

我将分享我在近十个应用程序中使用 Grails 的 3 年经验。我无法与 Ruby on Rails 进行比较,所以我会回答您的其他问题。

它克服了错误的开始吗?

  • 是的,它有。我在 Grails 2.0.4/2.2.4 上遇到了一些 Grails 错误。

它真的能带来快速发展的好处吗?

  • 它学习起来非常简单,易于开发,从未见过任何对 Java 世界有深入了解的人需要一周以上的工作时间来了解基础知识。也易于维护。而且你不必担心你的数据库 - 只要确保你是 mak

Eclipse 插件是否比以前更好并且适合目的?

  • 非常谨慎地选择您的 IDE。Eclipse 帮了我很多,但它崩溃了,并且造成了比它应该的更多的麻烦。我选择了 IntelliJ,在试用月份它似乎是一个更好的选择。最近我一直在使用 Sublime Text、一些插件和旧的命令行。我只在特殊情况下使用 IDE——例如,使用它的调试器。

它是否适用于现实世界的生产应用程序?

  • 它有点重。在编写模型之前,对您的设计选择进行大量研究。对良好的 Grails 设计进行大量研究。两年前我所做的大部分事情现在我都可以意识到如何让它变得更好,因为我更有经验。它可以很好地处理现实世界的生产应用程序,但根据您所犯的错误,Hibernate 确实会让人头疼。
于 2015-05-22T12:32:28.610 回答
4

调试真的很难。 我从来没有发现这是一个大问题。您可以附加一个调试器并遍历,或者将大量 println/logs 粘贴到代码中以找出发生了什么。

坦率地说,日志记录很糟糕。 我同意堆栈跟踪通常提供 4 页无用的信息,偶尔会有一行提供信息。然而,为这样一个很棒的框架付出的代价很小。

STS Eclipse IDE 具有边际价值。 Eclipse 对 Grails 的支持很差。如果可能,请使用 IntelliJ。我是一个紧缩的人,但如果我的公司允许我,我很乐意为 IntelliJ 支付现金。

于 2011-04-14T08:38:08.557 回答
4

从早期的 1.0-beta 版本开始,我就一直在使用 Grails,如果您来自 Java 商店,我只能建议您开始认真对待 Groovy/Grails。

如果您是 Java 商店并正在考虑使用 Ruby Rails,请停止——转而使用 Grails。如果 grails 不适合您,那么您可以随时启动 Rails。

于 2011-06-14T15:38:02.100 回答
2

Grails Eclipse 插件很垃圾。它完全无缘无故地崩溃,并且并不真正支持 Groovy 的灵活性。有传言说 NetBeans 和 IntelliJ 要好得多,但我还没有尝试过。

它执行吗?当然可以。甚至 Ruby on Rails 也能执行,只要您为问题投入足够多的服务器。不过,我不知道 Grails 与各种 Java 框架相比如何。

它真的能带来快速发展的好处吗?好吧,我仍然缺少很多好的 Ruby/Rails 东西。它不能自动识别 Date 和 Enum 请求参数(同样,Rails 在 Dates 方面也有一些问题), TimeCategory 应该是标准配置的一部分,但不是。但也有很多东西需要非常少的配置。

Rails 并不完全是这样(我特别期待 Rails 3),但它比许多 Java 框架更令人愉快。即便如此,表面之下的魔力比 Rails 更深。例如,Constraints 系统非常强大,但建立在巨大的 Spring 层之上,如果你想以稍微不同的方式使用相同的功能,那么它真的很不灵活。Rails 更容易颠覆,IME。

这值得么?是的。是不是比其他东西更好的选择?那要看。

于 2010-01-13T10:06:07.760 回答
2

根据我的经验,Grails 带来了一些非常吸引人的特性,绝对值得学习和使用。

  • 敏捷性——我们过去在传统 J2EE 项目中需要数周时间才能实现的东西,通常是使用 grails 插件系统一天的工作。像 ajax、jquery ui、acegi、restful 实现、调度系统等等
  • 在 JVM 上运行,这减轻了学习其他运行时系统及其特性的需要
  • 类似 Java 的语法和 groovy 语法糖。就像两全其美。您可以立即从 Java 开始,而不是学习像 Ruby 这样的新语言的语法,然后慢慢地转向稳健、简单和直观的 groovy 语法

    对于项目经理来说,除非有令人信服的理由“不使用”grails 出于某种原因(来自高层的阻力,采用新技术或其他东西),我看不出有任何理由不能使用 grails 或在最少尝试。

要回答有关调试的问题,这并不难。如果使用 Netbeans IDE,调试很容易。这让我再提一点。在对所有 IDE 进行几次实验后,我们发现 Netbeans 最适合完成这项工作。它对代码完成、语法高亮和调试等有更好的支持。在我看来,STS 还不够好。

于 2010-07-30T21:50:58.503 回答
2

我建议你自己试试。我喜欢 Grails 的灵活性和开发速度。但是,正如您所看到的,其他人的体验有所不同。我希望能够使用 Java 平台为我的客户开发快速应用程序,我发现 Grails 非常适合我们。

我还发现前端开发起来非常灵活。我也认为你需要使用常识并仔细选择你的插件。我坚持使用 springsource 支持的插件。

于 2010-01-13T21:34:04.907 回答
1

就个人而言,我学习了 RoR 并将其用于一些家庭项目,但后来切换到 Grails,主要是因为它在 JVM 上运行,因此我希望利用过多的 Java 性能/分析程序,这应该有助于识别任何在成为问题之前代码中的瓶颈。

总的来说,我没有发现 RoR 与 Grails 使用的 IDE 质量有太大差异。虽然,公平地说,我在 Linux 上编程并且没有尝试过 TextMate 进行 RoR 开发。当我使用 RoR 时,我使用了 Netbeans。

现在我正在使用 STS 进行编程,并且发现与 Grails 一起使用是一种乐趣,尽管我仍然发现方法检测/完成可以做得更好。

于 2011-03-30T02:03:48.953 回答
1

关于 eclipse 插件,仍然在路上,但你可以使用 Spring Source (SpringSource Tool Suite) 的 eclipse 版本

http://www.springsource.com/products/sts

相比之前的插件版本已经相当不错了,而且由于 Spring Source 已经收购了负责 grails 和 groovy 的公司,可以期待 STS 会很快变得更好

于 2010-01-17T19:37:33.140 回答
1

Eclipse 插件是否比以前更好并且适合目的?

与去年相比,它确实有了很大的改善。12 月,我参加了在伦敦举行的 Groovy&Grails Exchange。有一个关于 Eclipse/SpringSource STS 中 Groovy&Grails 集成的精彩演讲已录制,请参阅视频

在我看来,Eclipse 取得了很大的进步。目前 IntelliJ 似乎有点领先,但在接下来的几个月内可能会发生变化。

于 2010-01-13T10:02:59.210 回答
0

我想指出另外两个考虑因素,内存使用和就业市场。Grails 应用程序占用大量内存,尤其是在开发模式下,例如对于中型应用程序需要 600 Mb。当以生产模式部署时,例如Tomcat 中的war 文件,使用量约为500 Mb。这部分是从使用 Java 继承而来的。

至于就业市场,据我所知,与 Django 和 Ruby on Rails 相比,职位空缺公告中对 Grails 程序员的需求很少。

于 2013-06-26T18:15:39.707 回答
0

我是一名全职 Java 开发人员,但在我的业余项目中使用 Rails。我们在一年前为一个工作项目评估了 grails。我对 grails 的体验让我感到有点失望,这就是我开始研究 rails 的原因。使用这两种语言后,我的印象是,尽管 groovy 作为一门语言并不落后于 ruby​​,但 rails 提供了比 grails 显着改进的体验。很简单,Rails 似乎解决了更多现实世界的问题,特别是当您考虑到可用的好宝石的数量时。我正在考虑提供搜索、版本控制、rss、非 crud 应用程序、与云服务集成等。我的印象是 grails 大约是 rails 1.x 的水平。到本月底,rails 3 应该已经发布。我们' 实际上,我现在决定在工作中使用 Rails。最后,grails 对于 Java 开发人员来说更容易上手,但最终缺乏涵盖更广泛项目需求的细化。

于 2010-01-13T09:48:49.987 回答
0

根据我截至 2013 年底的经验。

优点

  • 当您使用很少的插件并限制一组 Grails no-s 和 never-s 时,这是一种非常流畅的开发体验

缺点

  • 刷新 (F5) 始终是个问题。这是最烦人的。出于某种原因,我不得不在每 3-4 次刷新时重新启动服务器。有一个众所周知的重启错误:question1 , question2,尽管它很少发生。
  • 语言级别的错误。当我使用静态内部类时,我总是需要在更改时重新启动服务器。虽然构建没有问题,但语言使用对我来说是有限的
  • 启动时间、构建时间、应用程序大小(小型应用程序为 70 兆)、内存使用情况
  • 只能远程调试,IDE调试很不稳定
于 2013-09-26T06:50:16.153 回答
0

我会说不。恕我直言,对于大多数用途来说,它仍然过于臃肿,特别是如果您只想制作原型。我们不需要所有这些代码,也不需要所有与 grails 捆绑的依赖项来制作 Web 应用程序。您不需要每次发布 Web 应用程序时都需要 spring。在向堆栈添加一个充满依赖关系的整个世界之前,请先查看您要完成的工作。我认为了解您的应用程序包含哪些内容很重要。

我建议看一下像ratpack这样的东西,它更轻,几乎就像红宝石的sinatra。

于 2012-10-10T21:08:56.690 回答
0

它克服了错误的开始吗?

它仍然很可怕。我不知道他们的开始,但是从 Grails 2 到 Grails 3 的迁移仍然是一场噩梦,他们打破的比解决的要多。

它真的能带来快速发展的好处吗?

我花了一个小时制作 Grails 的测试以在控制台中输出一些东西(它不能开箱即用),即使在 Java 中你也不会花这么多时间从测试中输出一些东西。

它是否适用于现实世界的生产应用程序?

我仍然不知道有哪家著名公司正在使用 Grails 构建某些东西。

Eclipse 插件是否比以前更好并且适合目的?

我不知道为什么有人仍在使用 Eclipse,但 IntelliJ 对 Grails 3 的支持只是无法使用。

所以,回答主要问题:

Grails(现在)值得吗?

如果您买不起 Microsoft Access 许可证,也许可以。对于真正的项目,我会远离 Grails。事实上,这只是一个死胎。

于 2017-01-23T18:09:08.407 回答