QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

对 Grails 之误解

  • 2007-07-11
  • 本文字数:1513 字

    阅读完需:约 5 分钟

Grails 开发团队成员 Marc Palmer 发表了一篇博客文章,针对开发人员对 Grails 常见的一些误解逐一进行了说明。例如针对“对于我来说,Grails 还不够成熟”,他这样回应:

针对这个误解,我想不断增长的商业网站数量就是最好的答案了。同时,Grails 也是基于 HIbernate、Spring 和 SiteMesh 这些成熟完善的框架构建的,更不用说作为万年常青树的 Java JDK 了。Groovy 项目都已经有超过三年的历史了。

接着,对于“Grails 使用的是一门解释型语言(Groovy)”这个误解,他谈到:

Groovy 在运行时自动编译成 Java 虚拟机字节码,它绝绝对对彻彻底底不是一门解释型语言。句号。绝不。我说了绝不了么?一点儿也没错。

最后,讨论到 Grails 是否支持 Rails 的一个克隆产物,他如是回答:

Ruby on Rails 引入了不少非常好的主意,并将它们合为一体。Grails 将其中的一部分应用到了 Groovy/Java 的世界中,但加入了许多 Ruby 中并不存在的特性和概念,所有这些东西都是以一种对 Groovy 和 Java 程序员有意义的方式展现给他们的。

Graeme Rocher 顺势而上,也提出了自己的 Grails 误解和问题列表,比如说“在我们有了 JRuby on Rails 之后,谁还要 Grails 呢?”:

这个问题很有代表性,也是对“Grails 到底是什么”最大的误解之一的根本所在。JRuby on Rails 是让 Rails 运行在像 GlassFish 这样的 Java EE 容器上非常优秀的方式之一,就是这样而已。但 Grails 的目标却大为迥异,它并不是 Rails 在 Groovy 语言上的一个移植版本,而是将业界内最为强悍的组件(比如说 Spring、Hibernate、Quartz、Compass 和 SiteMesh 等)以最佳方式组合起来的一个实践,并通过采纳无配置规约(Convention-over-Configuration,CoC)使它们符合“不重复(Don’t Repeat Yourself,DRY)”原则。 我们并不是在重造轮子,而且由于 Grails 内核的绝大部分都是以 Java 编写的,它也显得更加强壮和稳定。事实上,从内核角度看 Grails 是一个 Spring MVC 应用,可以被部署到所有的主流容器之上,不仅仅只有 Glasshfish,还有大型商业容器,比如说 WebLogic、WebSphere 和 Oracle AS。

再有,“为什么 Grails 比 Rails 更适用于企业应用?”:

原因很多,最显著的两个原因就是 Spring 和 Hibernate。到目前为止,有不计其数的组织在采用 Spring 和 HIbernate,他们都有既有的 Spring 上下文环境,以及已经构造好的 Hibernate 领域对象等。 在我开始参与 Grails 项目之前,我就经历过同样的情况。我们设计 Grails 的目的就是为了让它和这些框架尽可能无缝地整合起来。因此,我们打个比方,你可以把一个用 Java 编写的 Hibernate 领域模型及其对应的配置文件直接扔进 Grails 应用中,然后就可以使用动态的查询方法,并且直接使用 GORM 了。

此外,Grails 控制器使用了标准的 Servlet API 对象(如 request、response 和 session 等),因此可以和其它的 Servlet 一起使用。毕竟,掀起它的盖头之后,我们会发现它不过是一个 Spring MVC 应用。另一方面,Rails 几乎是按照和 EJB2 一样的方式设计的(在我发现这点时,怎一个“震惊”二字了得!)。也就是说,你在扩展 ActiveController 和 ActiveRecord 等框架对象时,你也就被绑定在了这套框架上。

在 Rails 里面根本就不存在领域模型的说法,Rails 的模型就是数据库表。这当然是一件好事了,但在企业内部,同一个领域模型可能会在许多不同的应用中服用,比如说桌面应用和 Web 应用。在 Java 里,这实际上是非常成熟完善的,通过把类对象及相应映射文件打包成一个 JAR 文件即可。

亲爱的读者,关于 Grails,您还存在什么问题吗?或者您还见过对 Grails 用途的其它误解么?请在 InfoQ 的 Java 社区与我们一同分享吧。

查看英文原文: Grails Misconceptions

2007-07-11 20:301848
用户头像

发布了 117 篇内容, 共 17.2 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

智慧社区服务平台开发,平安小区建设

t13823115967

智慧城市 平安小区

我是如何拿到蚂蚁金服offer?看完2020年Java研发岗复盘经验总结,是时候让面试官懵逼了

比伯

Java 编程 架构 面试 程序人生

原来只想简单看一下String源码,没想到整理了这么多知识点

小Q

Java 学习 编程 面试 string

警惕”被讲故事“ | 读《叙事改变人生》

邓瑞恒Ryan

读书笔记 哲学 创业心态 社会学 世界观

tron波场智能合约系统软件开发|tron波场智能合约APP开发

系统开发

盘点 2020 | 一枚程序员的跑步之路

Simon

程序员 跑步 锻炼 盘点2020

智能警务平台搭建,公安一体化警务实战解决方案

t13823115967

智慧公安 智慧警务系统开发

3. 搞定收工,PropertyEditor就到这

YourBatman

Spring Framework 类型转换 PropertyEditor

JVM的艺术—JAVA内存模型

Java jdk JVM

十一周作业

走走,停停……

六个步骤,从零开始教你搭建基于WordPress的个人博客

华为云开发者联盟

网站 WordPress 搭建

记一次网络请求连接超时的事故

AI乔治

Java 架构 HTTP

为了SpringBoot提交Tomcat执行,我总结了这么多

996小迁

Java tomcat 架构 springboot

《Tensorflow:实战Google深度学习框架》.pdf

田维常

年终盘点 | 七年零故障支撑 双11 的消息中间件 RocketMQ,怎么做到的?

阿里巴巴云原生

阿里云 开源 云原生 中间件 消息队列

最简单的 K8S 部署文件编写姿势,没有之一!

万俊峰Kevin

Kubernetes Go 语言

微信昵称可以加雪花了,个性又好看

程序员生活志

工具 微信名 雪花

线程池的7种创建方式,强烈推荐你用它...

王磊

Java

智能合约DAPP软件系统开发

系统开发

IT民工闲话·点一盏灯

IT民工大叔

成长 IT 传承

深入浅出 Go - sync/atomic 源码分析

helbing

Go 语言

Android uni-app 封装原生插件

anyRTC开发者

uni-app android 音视频 跨平台 聊天室

实战排查|为什么遮挡推流摄像头,会导致播放绿屏?

阿里云CloudImagine

音视频 WebRTC RTC bug RTMP

刚刚,阿里云知行动手实验室正式开放公测了

阿里巴巴云原生

阿里云 开发者 云原生 k8s dubbo

亿级流量背后战场,京东11.11大促全方位技术揭秘

京东科技开发者

云计算

iOS面试基础知识 (二)

iOSer

ios 面试

mybatis分页插件如何实现?

田维常

mybatis

英特尔正式发布全新一代内存和存储产品

E科讯

实践大于一切!Alibaba最新MySQL性能优化+高可用架构全彩版PDF

Java架构追梦

Java MySQL 学习 架构 面试

未雨绸缪,数据保护之NBU介质备份

华为云开发者联盟

安全 数据 保护

对Grails之误解_Java_Geoffrey Wiseman_InfoQ精选文章