Grails——赋能敏捷开发的利器

几年前,一个开餐厅的亲戚找我做一个网上订餐的网站(当时外卖平台还没有兴起)。一开始我是拒绝的,因为我的本职工作就是做软件开发的,业余时间真没兴趣再做。而且从头开始做一个网页应用,工程浩大,我也没有这个时间。

一个偶然的机会,我接触到了Grails,通过它几个小时就能构建一个专业的涵盖前、后端的Web应用,于是我尝试着开发那个订餐网站,结果,我利用几个周末仅用了半个人/月的功夫就做好了一个能上线接单并具备后台管理(含基本财务)的网站。刷新了我对软件开发的认知,原来开发一个复杂的含前、后端的Web应用也可以如此地快。

Grails是一个基于JVM的全栈快速Web应用开发框架,类似的框架有著名的Rails,但是它需要用Ruby语言,对于广大的Java开发者,要学习一门新语言显然不现实。于是有人基于Groovy做了Grails,可以理解为Grails = Rails on Groovy。Groovy是JVM三大衍生语言之一,相对于Closure和Scala,它可以视为是Java的简化版和脚本化,学习周期最短,上手只消半天,而且相对于有点老气的Java,动态语言Groovy编程要快速和灵活得多。所以Grails可以说是面向Java开发者的快速开发框架。

通常情况下,开发新的应用程序,搭建开发和测试环境都要花不少时间,这也是让人望而却步的重要原因。万事开头难,好的开始已经是成功的一半。使用Grails,你可以从第一分钟就开始编写业务逻辑,无需考虑环境问题,避免重复造轮子,帮助你更快地开始。它的底层基于很多强大的Java流行框架,如Spring、Spring MVC、Hibernate、Gradle,以及主流的网页技术如HTML5、Taglib等。但你完全不用懂这些东西,Grails已经帮你封装好,你只需要通过它的框架命令就可以轻松搭建你需要的应用。虽然我是做Web应用出身的,但当年的我已经“退出江湖”多年,对于很多的新的技术和框架已经脱节,而通过Grails,我可以在不需要懂这些技术和框架的情况下就运用到它们。而且可以实现响应式网页设计,一套应用分别在电脑、平板和手机完美呈现。

通过Grails的开发过程是,首先抽象你的需求需要哪些Domain Object以及它们会有哪些属性,然后Grails便会帮你围绕Domain Object创建相应的数据库表结构和CRUD脚手架,包含Controller和Web页面。复杂逻辑可以在Service层编写(支持Transactional),然后通过注入在Controller上调用。也就是说,你可以很轻易地获得一间定制化的精装修房子,然后根据自己的需要进行进一步细化。

通过Grails,你可以非常敏捷地进行开发:

更快地开始,无需费心环境搭建,自带测试环境(嵌入h2内存数据库和Tomcat,这点后来的Spring Boot应该是学它的);

只消几分钟便可得到Domain Object的CRUD脚手架的精美页面,早期开发过程Domain Object可以随时修改,表结构和脚手架会自动更新,可以边设计边编程边测试,可变性非常高,不需要一开始一次性做对(敏捷);

Groovy强大的动态性和闭包,大大加快了编程速度;

框架设计上采用“约定胜于配置”的原则,大大减少非业务配置和简化代码关系;

配置采用DSL格式,比XML更简洁;

自带测试框架支持测试驱动开发和测试自动化;

可分环境配置启动数据,使测试、上线更轻松;

支持分环境参数配置,轻松生成war包部署到不同环境,支持主流Java应用服务器和数据库;

强大的社区和丰富的插件,有些比较复杂的功能,比如用户验证和授权,通过它的Security框架,只消几行代码便可实现。

也正因为通过Grails开发起步快,它特别适合需要快速试错的初创企业,据说Linked-in最初的版本就是用Grails开发的。当然,任何事情都有两面,要发挥Grails的优势,你最好遵循Grails的方式来进行开发,但是随着业务越来越复杂,它也会不可避免地出现敏捷性和性能下降的情况,甚至到某个发展阶段要进行重构或重写,这是所有应用的宿命,但如果当初不能更快地开始,可能很多想法就不会变成现实。先完成,再完美

类似的框架还有基于Scala的Play,但是你要掌握Scala就没有Groovy那么容易了。近年流行的Spring Boot和Grails的比较是,Spring Boot只包含Controller和API,没有UI,适合做微服务应用,Grails适合包含前端到后端的全栈单体应用。我相信Spring Boot吸收了不少Grails的思想,实现了开箱即用,而现在新版Grails反过来把Spring Boot作为底层框架之一进行了重构。Spring曾经打造过类似Grails的框架Spring Roo,但是流产了。

接触敏捷,改变了我对软件开发的认知,接触Grails,再一次刷新了我的认知。Grails基于敏捷的思想从技术上实现了快速开发,反过来赋能了敏捷开发。

关于作者

敏捷、精益、DevOps专家

精通极限编程、Scrum、看板方法、测试驱动开发、持续集成、行为驱动开发、DevOps工具栈

曾在GDevOps、DevOpsDays Meetup、中国软件技术大会等论坛发表主题演讲

著有《猎豹行动:硝烟中的敏捷转型之旅》一书

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181209G0TWWB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券