杰森·鲁道夫:格拉尔斯比赛的第二站


贾森·鲁道夫从很早就开始研究Grails,他是Getting Started with Grails,第一(免费!)关于框架的书。杰森在Ruby和Rails方面也有丰富的经验,这使他处于一个特殊的位置来解释Grails的优缺点。享受吧!

[img _ assist | NID = 2173 | title = | desc = | link = none | align = right | width = 120 | height = 150]杰森,你在Grails的早期就写了《开始使用Grails》,怎么样?

A.Grails带着简化基于Java的web开发的使命来到这个舞台上,而此时Java生态系统的其余部分正忙于尽可能增加不必要的复杂性。这是一个完整的解决方案,它不是在重新发明轮子,而是建立在像Spring和Hibernate这样的行业中坚力量之上。它采用了这些经过验证的组件,并在它们之上分层了一个人性化的界面——这个界面首先是为了提高工作效率而设计的,并且接受了Ruby on Rails所推广的“超越配置的约定”的咒语。在花了几年时间使用传统的基于Java的web框架并忍受了无数持久性“解决方案”的痛苦之后,我不禁对Grails所能提供的东西感到兴奋。

大约在Grails 0.2发布的时候,InfoQ找我谈了写书的事,所以我不得不称赞他们在框架中看到了早期的承诺,并在书上冒险。我们知道该框架将继续快速发展,但我们希望帮助人们了解Grails,并为人们提供一个简单易用的资源来开始使用它。写这本书是一次很棒的经历,特别是因为我很幸运有一个了不起的评审团队,包括格雷姆·罗彻(格雷尔斯项目负责人)和其他人,他们好心地自愿为这个项目贡献他们的时间。尽管我对这本书充满热情,但最终决定这本书是否真正有价值的当然是社区的意见。第一个月就有近3000次下载,到去年秋天已经有超过10000次下载,反响非常积极。

问:既然Grails已经达到1.0,你如何看待这个框架?

A.Grails在1.0的征途上已经走了很长一段路,回顾过去几年,看看它是如何成熟的,这是令人兴奋的。当我回顾我写的第一篇关于Grails的文章(Hoisting Grails to Your Legacy DB),这涉及到组装Hibernate XML映射文件来将Grails与非常规的数据库模式挂钩,我将其与我今天解决相同问题的方法进行了比较(使用令人愉快的简洁GORM DSL),这些进步确实令人瞩目。添加其他最近添加的功能,如content negotiation,已改进REST support,以及ever-growing plugin community,Grails无疑是Java网络框架领域最有吸引力的选择。

问:GORM DSL?告诉我们更多!

A.这 GORM DSL极大地简化了对进行各种调整的任务 标准的Grails ORM约定。在引入之前 如果你偏离了数据库的约定,它 意味着您要么必须生成Hibernate XML映射文件 告诉Grails如何执行映射,否则您必须使用EJB3 处理该任务的注释。即使你稍微偏离了 从GORM约定(例如,有一个名为“b_date”的列 您想要映射到名为“生日”的域类属性,您 不得不离开简单的Grails领域类,取而代之的是 使用XML或注释。

现在,感谢 您可以指定自定义表名和列名,定义 索引、设置二级缓存等等。你可以做所有这些 就在你的领域类的简洁而有表现力的闭包里面。

问:你是如何参与Groovy的?

A.实际上,正是通过Grails,我找到了实现Groovy的方法,随着Grails的不断发展,我怀疑许多其他开发人员也会以类似的方式发现Groovy。当然,正是Groovy使Grails中的许多功能成为可能。在Ruby社区中,你经常会听到Stuart Halloway和Justin Gehtland评论说,“Rails是入门药物,Ruby是成瘾药物。”我不禁认为,同样的规则也适用于Grails和Groovy。Grails展示了Groovy的许多可能,但是Groovy的价值远远超出了网络空间。

事实上,当我试图在我的上一个Java项目中唤起对自动化测试的额外热情时,我把Groovy看作是向团队展示测试不必是痛苦的一种方式。这个特殊应用程序的核心根本不涉及网络,但是Groovy仍然非常适合测试这个应用程序。Groovy对常见数据结构的字面语法使得准备测试输入变得极其简单。它的正则表达式的字面语法和它的附加断言(超出了标准的JUnit断言)使得验证代码更加容易。一般来说,使用动态语言会带来更愉快的测试体验,而不是为了完成相同的任务而必须跨越Java强加的所有限制。

问:你也做Ruby/Rails开发,它对你的Groovy/Grails工作有什么影响?

A.鉴于我们刚刚讨论了用Groovy进行测试的优点,你问这个问题很有趣。Ruby社区对测试的热情是彻头彻尾的感染,Rails让测试驱动开发变得轻而易举。对于大多数测试,Rails可以启动一个测试实例,并在一秒钟内报告测试结果。将这种速度与对测试应用程序所有核心组件(例如,模型、控制器等)的卓越支持相结合。),而且在您的代码基础上,没有任何低于100%测试覆盖率的借口。

体验了在Rails中测试的简单性后,我很自然地发现自己也想从Grails中得到同样的东西。虽然Grails受益于使用Groovy编写测试,但这一事实本身并不足以将Grails测试与rails中的测试支持相提并论。不幸的是,目前在Grails中的测试仍然是相当繁重的,最近格伦·史密斯的出色的公共实验证明了这一点MockFor(March)。“当你看着amount of setup required to test a Grails controller很难想象有人真的在测试控制器,当测试Grails域类时,情况也好不到哪里去。这是一个令人不安的想法,因为越来越多的Grails应用正在进入生产阶段。

Grails在运行测试的一般速度方面也有增长的空间,尽管不可否认的是,在过去的几个版本中它已经变得明显更好了。相比之下,我发现运行一个Grails测试的时间通常是在rails应用程序中运行同等测试的时间的五倍。在典型的运行测试、调整代码并再次运行测试的TDD模式中,运行测试花费太长时间会严重影响您的工作效率。

公平地说,Grails测试方面并不全是悲观和厄运;有几个值得注意的好消息。首先,格伦的帖子重新引发了关于Grails测试状态的讨论。我认为没有比改进测试基础设施更值得关注的Grails特性了,至少已经有一个了JIRA ticket人们可以投票支持将Grails测试提升到一个新的水平。第二,在Grails 1.1,我们应该看到对“连续测试”的支持,这一特性有望模仿Ruby的流行autotest 工具,它持续监视代码的更改,并智能地确定需要运行哪些测试来验证您最近的更改。这两个改进都将大大有助于改进Grails中测试的最重要的方面。

到目前为止,我们一直在讨论我在Grails中错过的rails特性,但是至少有一个Rails特性我很高兴还没有进入Grails。虽然有些开发人员hoping to see fixtures get added to Grails,大部分Rails社区已经开始前进,承认从理论上讲固定装置是一个好主意,但实际上是这样full of problems实际上。维护设备是一件痛苦的事情,它们根本不属于单元测试(没有它们,许多功能测试也会更好),并且它们会大大降低测试套件的速度。

您询问Ruby/Rails开发如何影响了我的Groovy/Grails开发,但是需要注意的是,这种影响实际上是双向的。由于rails最先出现,有些人可能会错误地认为Grails严格来说是Rails的克隆,但事实肯定不是这样。例如,考虑到没有等同于Grails service layer在铁轨上。所以,我们(Relevance)写了《铁路》SimpleServices plugin为我们的Rails应用程序提供相同的自动事务划分,并随着应用程序的业务逻辑变得更加复杂,帮助我们保持控制器的美观和精简。简单服务100%受到了Grails的启发,我们发现了将Grails的这一方面应用到rails中的真正价值。

这些比较的共同主题是,这两个社区有机会相互学习。很明显,Rails和Grails有很多共同之处,因此,我们应该从每个阵营中观察成功,并从任何失误中吸取教训。

问:那么Groovy呢,你将来想看到什么特性?

A.虽然Groovy中肯定有我希望看到的进步,但是这些进步中的大部分可能是以库的形式出现的(与语言本身的变化相反)。在这一点上,了解到我在Groovy中最密切关注的两个领域都与测试相关,您可能不会感到惊讶。我很好奇各种行为驱动开发(BDD)解决方案将如何在Groovy社区和安迪·格洛弗的社区中发展easyb图书馆当然是值得一看的。此外,随着越来越多的人开始用Groovy编写测试,我怀疑我们还会看到其他选项出现在嘲笑和存根的空间中。

在许多方面,Groovy 1.5是如此具有里程碑意义的发布,以至于我仍然很享受它带来的令人印象深刻的改进。Adding the joint Java / Groovy compiler有效地消除了在您的Java项目中不使用Groovy的最大原因(也可能是唯一的原因),即使是较小的更改也是值得欢迎的改进。例如,虽然添加枚举是Groovy 1.5中较小的增强之一,但它消除了我们偶尔不得不回归到用Java编码的另一个原因。现在枚举(以及其他各种Java 5特性)已经进入了混合模式,Groovy拥有了大多数(如果不是全部的话)您想要的Java特性。当然,Groovy也提供了许多其他功能。见鬼,Groovy开发者当然不需要在Java 7中等待闭包;今天,我们正在享受集成良好的Groovy APIs的闭包。

谢谢杰森!

杰森的简历

杰森·鲁道夫(Jason Rudolph)是关联性公司的负责人,关联性公司是一家领先的咨询和培训机构,专门研究Ruby、Rails、Groovy和Grails,并将它们集成到企业环境中。Jason在为国内和国际各种规模的客户开发软件解决方案方面拥有超过九年的经验,这些客户包括初创公司、道指30公司和政府机构。

杰森是这本备受赞誉的书的作者,Getting Started with Grails,并经常在软件会议和用户组中发言。Jason也定期对开源社区做出贡献,两者都是早期的承诺者Grails,同时也是Streamlined框架和许多其他Ruby和Rails项目。

杰森拥有弗吉尼亚大学的计算机科学学位。他现在和他的妻子(她可以使用一个功能性的网络应用程序,让它看起来很不错)以及他的狗(她可以跑得比他快,但不是松鼠的对手)住在北卡罗来纳州的罗利。