Grails适合Java企业吗?当然!

发布于:2021-01-16 11:06:16

0

150

0

grails groovy java peter ledbrook vmware

对Grails的大多数介绍都侧重于在新的数据库模式之上快速构建新的web应用程序。域的建模(映射到数据库表的类)和构建的HTML用户界面都使它非常容易开始。但除了快速启动,它还能提供什么呢?在Java企业中,这是一个严肃的选择吗?对此的回答是肯定的,我将带您了解框架的一些特性,这些特性使它适合这种环境。

为什么要搭脚手架?

创建域模型时,您希望能够通过用户界面与之交互,添加、更改和删除数据。这就是脚手架所提供的。给定一个域类,例如:

class Book {
   String title
   String author

   static constraints = {
       title blank: false
       author blank: false
   }

只需添加具有scaffold static属性的匹配控制器类,即可生成CRUD web用户界面:

class BookController {
   static scaffold = Book
}

当应用程序运行时,您可以通过一组标准的url来创建、查看、修改和删除Book的实例。

很少有真正的web应用程序是基于脚手架的,那么它真正提供了什么价值呢?只是个噱头吗?一点也不。不要低估快速高效地启动和运行一个正常工作的应用程序的价值。除此之外,脚手架在一些场景中也有很大的价值。

支持真实用户界面的开发

在为web应用程序构建最终用户界面的过程中,有许多情况下,您需要与数据进行充分的交互,特别是测试正在使用的某些功能。如果您启用了框架式UI,那么您就可以在浏览器中与数据进行交互。对于一个典型的开发人员来说,这比处理数据库客户机工具和SQL脚本更有效率。

一旦初始应用程序准备就绪,就很容易禁用脚手架,所以不会因为脚手架页面而污染您可爱的用户界面。或者,考虑第二种情况。

管理UI

在应用程序或网站上线后,您有多少次希望修复某些数据?通常web应用程序不允许您这样做,因此您可能必须发布新版本或(恐怖!)直接在数据库中修改数据。有一个安全的管理员用户界面,让您可以完全访问域模型,这不是更好吗?

您可以使用类似Spring安全性插件的东西来保护脚手架控制器,所以为什么不保留它们并确保只有管理员可以访问这些页面呢?如果你不能通过主UI做你需要做的事情,它是一个理想的回退选项。

非常大的域模型

如果你有50个或100个甚至更多的域类呢?为所有这些创建一个web应用程序需要大量的工作。脚手架在这里很有帮助,可以成为整个应用程序的基础。您不局限于标准的外观:scaffolding使用您可以随时定制的模板。只需更改CSS或替换整个HTML,甚至可以选择使用JavaScript库。这取决于你。

说到大型域模型,如果您手工创建,那么首先创建这些模型可能会非常耗时。幸运的是,你在这里有一些选择。

现有数据库

GORM(Grails对象关系映射)的默认实现是基于Hibernate的,这允许使用一些有趣的技术。例如,许多Java企业都有基于Hibernate或JPA的现有域模型。为什么他们会接受任何使用替代语法重新创建模型的要求?听起来像是不必要的努力。

幸运的是,Grails可以使用现有的模型,只要它有xmlhibernate映射或者使用JPA注释。关于如何做到这一点的详细信息可以在别处找到,但基本上您可以将模型作为Java源代码或JAR包含在Grails项目中;创建Hibernate配置文件;并在单独的文件中添加GORM约束。然后您就可以完全访问Grails提供的所有优秀特性,比如动态查找器、Where查询、“errors”属性等。

如果你没有一个现有的模型或者你真的想要一个成熟的标准GORM模型呢?对于这种情况,我们有反向工程插件,它将从现有的数据库模式生成一个GORM模型。这不是一个灵丹妙药-模型无疑将需要调整-但它可以节省你很多时间,如果你有许多数据库表。定制现有文件要比从头创建文件容易得多。

这样的域模型可以为单个web应用程序创建,但在企业中,同样的数据库和模式也可能被多个应用程序使用。如果您可以将模型及其约束打包,或者添加一些粗粒度的服务以使其更方便使用,那就太好了。

利用插件

Java中打包的标准单位是JAR。这些当然也可以被Grails使用,但是一个简单的类集合忽略了Grails提供的丰富约定和工件类型。例如,Grails如何知道某个特定类是标记库还是控制器?

这就是插件的用武之地。在最基本的层次上,它们按工件类型打包功能,以便您可以在多个应用程序之间共享该功能。一旦插件安装在应用程序中,它的所有域类、服务、标记库等都可用,就好像应用程序自己定义了它们一样。

想象一下,将一个插件放到应用程序中,并能够立即使用定义良好的服务与现有数据库进行交互。该插件甚至可能包含用于查看域模型部分的标准UI元素—只需从您自己的视图中使用它们。插件机制不仅仅是为了提供Spring安全集成或MongoDB支持。它还可以帮助您将应用程序分解为灵活、可重用的部分。插件的一个优点是它们就像Grails应用程序一样,所以您甚至不必学习任何新的东西来使用它们。

结论

Grails背后的一个关键原则是使Java开发人员能够轻松地创建web应用程序,同时提供与现有系统集成的灵活性。GORM以一种方式体现了这一原则,即您可以与现有的领域模型集成,而不必牺牲动态查找器的便利性,在动态查找器中,查询和脚手架可以被使用

我只触及了表面。例如,您可以对NoSQL存储使用相同的gormapi,使它们可以立即访问。但是,当您需要访问它们的特殊功能时,您可以随时访问它们的本机接口。在GORM之外,Grails是基于Spring构建的,如果需要的话,它允许您使用该框架的全部功能

Grails是在Java企业中构建web应用程序的一种很好的方法,您可以开始使用它进行快速原型设计。您需要的工具和集成点就在那里,然后您就可以在探索插件生态系统时获得一些乐趣,比如简单的访问控制、作业调度等等!