【问题标题】:Can I use Grails but code in Java?我可以使用 Grails 但使用 Java 编写代码吗?
【发布时间】:2014-02-23 06:04:42
【问题描述】:

我听说过很多关于 Grails 框架的文章。我从他们的网站上了解到,这是一个旨在针对 Groovy 语言的框架。

Grails 看起来比 Spring 和 Struts 等需要太多配置的框架更适合中小型应用程序。但同时由于不够成熟、难找开发者等原因,我很不情愿直接跳入 Groovy 语言。

我想知道我是否可以使用 Java 来代替 Groovy,同时还能利用 Grails(或仿照 Rails 的东西)的好处。那么,我可以使用 Grails 框架但使用 Java 语言编写代码吗?尽管 Groovy 看起来像是 Java 的超集,并且它们都可以相互无缝地工作,但我找不到一个具体说明我是否可以使用 Grails 并用 Java 编写代码的地方。

【问题讨论】:

  • 关心备份“不够成熟”的部分?我已经在 Groovy 中编写了三年左右的生产代码,而我的 Java 程序员立即开始使用 groovy 进行编码(尽管他们需要一些时间来编写惯用的 groovy)

标签: java grails groovy frameworks


【解决方案1】:

你可以,但你会失去 Grails 的所有好处。像动态方法、工件、控制器、大多数插件等。而且我认为您无法使用 Java 中的 GORM(数据库映射)。

你会失去什么:

  • GORM 和域 -> 您可以改用 Hibernate
  • 控制器和 URL 映射 -> Spring MVC
  • Services -> 你可以用普通的旧 Spring Beans 代替,它基本上是一样的
  • 大多数插件,因为它们大多基于一些 Groovy 功能​​、动态方法或 GORM

所以,基本上你会得到标准的 Spring MVC 应用程序,它具有有限的 GSP 视图,也许还有更方便的应用程序配置方式,更容易使用静态文件/资源​​和 i18n。

PS 你总是可以用类似 Java 的语法编写 Groovy 代码。并在这种情况下使用所有 Grails 功能(慢慢转向 Groovy,你会看到)

PPS 顺便说一句,Groovy 开发人员并不缺乏。每个 Java 开发人员都可以开发 Groovy。阅读一些 Groovy for Java 程序员的介绍只需要 2-3 小时。

【讨论】:

  • 我不太明白他为什么会失去 grails 功能。他将编写 Java,而不是控制器/服务中的常规代码。哪个应该编译没有问题。 src 中的所有代码都可以是纯 Java 文件。他唯一拥有的 .groovy 文件是 grails-app 中的文件。但是仍然可以在其中编写 Java,即使它有一个 groovy 扩展。
  • 如何使用纯 Java 编写控制器/服务?
  • 控制器和服务需要是 groovy 文件,但操作和方法中使用的语言可以是 Java。确保仅使用 Java 的另一个好方法是将所有业务逻辑保留在 src 中,并仅从控制器或服务中调用它们。这减少了对 groovy 的依赖。无论哪种方式,我的观点都是可以很好地在 groovy 文件中编写 Java 代码,并且它也可以编译。
  • 但是在这种情况下它会变得很时髦,对吧?实际上,我认为这是对@Carven 的一个问题,他们是否同意至少部分使用 Groovy(并花 2-3 个小时来学习它)。但是对于当前的问题,他们希望完全避免使用 Groovy
  • 是的,如果学习做的话,有一点。但这种学习更多的是圣杯学习,而不是 groovy 语言本身。至少考虑到他对开发人员可用性的担忧,这是一种让他们在编写 Java 代码时获得 grails 的所有功能的方式,即使它很少在 groovy 文件中。
【解决方案2】:

Groovy 是 Java 的超集,因此您可以在 Groovy 文件中编写纯 Java,从而利用 Grails 的工具。需要注意的是,您需要为文件提供 .groovy 扩展名,以便它们由 Groovy 处理。

如果您想坚持使用纯 Java,您可能最好坚持使用纯 Java 框架。另一方面,也许你有一个学习 Groovy 的好机会。 Groovy 的学习曲线非常浅(毕竟可以编写标准的 Java)。

Grails 如此快速和简单的部分原因在于它大量使用了 Groovy,特别是控制器(可以)看起来像这样:

def index = {
  def model = Person.findAllByCity("Oxford")
  respond model
} 

Groovy 最大的好处(恕我直言)(以及为什么在没有它的情况下使用 Grails 并不可行)是 Person.findAllByCity("Oxford") 方法调用,其中 GORM 在运行时根据您的域类的属性动态创建方法。

可以用一种更类似于 Java 的方式来编写上面的代码,尽管你不能完全摆脱 Groovy:

void index = {
  List<Person> model = Person.findAllByCity("Oxford") // This is still a dynamic method added by the Groovy MOP
  respond(model)
} 

请注意,我根本没有测试过上面的代码。

【讨论】:

    猜你喜欢
    • 2012-01-11
    • 2011-12-11
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-06-06
    • 1970-01-01
    相关资源
    最近更新 更多