Grails框架是一种基于模型—视图—控制器(Model—View—Controller,MVC)设计模式的使用Groovy和Java编程语言的Web应用敏捷开发框架。它构建于Spring、Hibernate等标准Java框架之上,可以帮助开发人员简单、快速地构建和发布应用服务。它与Java语言的JFinal、Scala语言的Play、Python语言的Django、Ruby语言的Ruby on Rails(RoR)概念相似,属于Web服务开发框架。
2008年,第一版Grails框架发布,并在之后的十年间进行了多次更新,至本书编写时已发布版本4.0.4。很多人会说,现在已经有了很多开发框架,为什么还要再建立一个Grails框架?在Grails框架出现之前,很多Java系的Web开发框架都非常复杂,需要大量的信息配置,门槛高而且不方便使用,让开发人员倍感痛苦。但是由于Java语言的跨平台特点和性能优势,很多组织或者公司的系统在Java相关开发框架下已经运行多年,投入了大量的时间成本和人力成本,也积累了在Java平台上实现各种业务内容的丰富经验,使得这些组织或者公司的系统难以摆脱原有的Java技术体系。因此在现实生产中急需一种既能与原有的Java技术相结合,又能减少开发人员工作量的框架。
2004年,RoR框架出现。它的设计思想“约定优于配置”贯穿整个框架,为开发过程省去了很多不必要的配置过程。同样是基于MVC设计模式,应用系统不同的组件被框架统一地放到固定的目录下。RoR与传统的Java相比,省去了在XML文件中进行配置的工作,同时有更加灵活、强大的编程语言Ruby的加持,可以用很少的代码实现业务过程。因此RoR得到了很多开发人员的关注,它为解决Java开发痛点提供了可行思路。
Grails框架便是在RoR的设计思想下产生的。它使用语法更加灵活、更加简洁的编程语言Groovy,通过借鉴“约定优于配置”思想,使得开发效率大幅提升。虽然RoR也适合敏捷开发,效率与Grails框架相差无几,但是Grails框架的优势是Groovy语言可以与Java完美结合。这一优势使得开发者之前在Java上的投入不至于被丢弃,无须重新探索和创造“轮子”,Java框架下多年积累起来的技术得以继续使用,如Spring、Hibernate,以及Jetty、SiteMesh、Quarts等。另一个重要的原因是针对Java开发人员来说,Groovy拥有几乎水平的学习曲线。
因此Grails框架不仅提升了开发效率,同时也拥有更加友好的生态环境,它将Rails的思想带到了Java虚拟机(Java Virtual Machine,JVM)上,并且使用更加优美的方式集成到JVM环境。
我们通过了解Grails框架的产生历程,知道它的出现解决了一些实际问题,从中我们也总结了该框架的一些特征。
(1)约定优于配置
Grails框架中需要配置的信息很少,默认情况下,不同组成部分的代码具有不同的特征,存放在不同的路径下,框架可以根据约定自动构建。也可以使用配置文件来定义每个部分,约定优于配置,而不会代替配置。
(2)运行时加载
Grails框架出现前,常用的Java Web开发框架在每次更改之后都需要重新编译和启动Web服务。Grails使用了Groovy动态语言,在开发过程中对代码的更改可以在运行时进行加载,无须重新启动Web服务,刷新页面即可测试更改内容。
(3)兼容Java
Grails框架使用Groovy编程语言,直接运行在JVM上,并且完全支持Java语法,可以移植已有的Java技术。
(4)支持模板与脚手架
只需要重点关注业务逻辑部分,按照约定模式进行开发,就能够快速地创建应用,高效地完成开发任务。
(5)插件丰富
Grails框架很多重要的特性都是以插件的形式提供的,比如显示的Groovy服务器页面(Groovy Server Pages,GSP),甚至Hibernate框架很多特性也是以插件的形式提供的。同时Grails框架开放社区也提供了很丰富的插件,开发人员也可以定制自己的插件,提升开发速度。
Grails框架如图1.1所示。Grails框架建立在Spring Boot、GORM、SiteMesh、LogBack等成熟框架之上,借助Groovy动态语言实现了与Java语言的结合。Grails 3.0之后的版本使用Gradle作为构建工具,省去了烦琐的依赖配置过程。在这些基础之上,Grails框架拥有丰富的插件体系来实现常见的功能,同时Profile概念的引入可实现快速建立项目完成业务开发。Grails框架中关键概念包含以下8个。
图1.1 Grails框架
(1)Groovy
Grails框架使用Groovy语言编写,Groovy是运行在JVM上的一种动态语言,类似于Ruby、PHP、Python等其他动态语言,但是Groovy支持静态类型和静态编译,提供了更高的运行效率,并且完全兼容Java,对Java开发者友好。
(2)MVC
Grails框架实质上仍遵循MVC框架理念。
(3)Gradle
Gradle是Grails框架中使用的构建工具,它支持Groovy领域特定语言(Domain Special Language,DSL)作为描述文件,可以用来说明引用的插件和类库,以及描述构建过程。并且Gradle有丰富的插件库,与Grails共同构建了功能强大的生态系统。
(4)Spock
Grails框架以Spock作为测试框架,可以编写很多简洁的测试样例,无须编写过多模板,就可以快速、轻松地测试项目。
(5)GORM
Grails框架提供一种对象关系映射(Object Relational Mapping, ORM)框架,称为GORM,可以完成和关系型数据库的交互操作。
(6)Spring Boot
Grails框架同时基于Spring Boot框架,控制器层面建立在Spring Boot上,对网络请求部分进行处理。
(7)Spring
Grails框架是建立在Spring MVC基础之上的Web应用框架,继承和使用了Spring中的控制器逻辑、数据验证与绑定、运行时任务以及GORM中的事务管理。
(8)Hibernate
Grails框架使用Hibernate实现模型与数据的映射。
图1.2所示为Grails框架应用遵循基本的MVC模式。在应用系统中,控制器可以接收并处理用户发起的请求,参与用户交互过程,对用户的输入进行处理并连接模型生成系统的输出。与传统的MVC架构不同的是,Grails框架建议将过程复杂、处理耗时、涉及数据持久化的业务逻辑放在服务层实现,服务层默认实现事务和自动持久化,同时也可以使得代码层次分明。视图部分以SiteMesh框架作为支撑,可以接收控制器传递的模型参数并生成用户端页面或者结构化数据。
图1.2 Grails框架应用遵循基本的MVC模式
Grails框架中Profile实现了常用开发模型的快速建立,同时Grails插件在一些具体功能上进行了抽象和实现,在系统上实现了功能的快速拼接。Grails插件同样遵循基础的MVC模式,可以根据目标功能编写对应的控制器、服务层、模型与视图。