在开始Grails之前——送给想要学习Grails的朋友们

基于Groovy开发的Grails框架,继承了Ruby On Rails的轻快的同时,又可以兼容Java,不但可以节省编程的时间进行快捷开发,又可以有效利用现有系统,一举多得,可以说是一项非常吸引人的新技术。 
无论Grails还是Groovy语言,虽然有诸多优点,而且已经营多年,遗憾的是一直没有大规模普及开来。虽然目前并不被大多数开发团队所接受,但是,我始终坚信,Grails有它火的那一天,以下是本人在学习、开发Grails过程中的自己总结的一些Grails的特点,希望能够给对Grails感兴趣的同仁提供参考,如果能够抛砖引玉,让我们共同进步更是荣幸之至。 

在进入正文之前,首先做一下自我介绍。我本人于2006年正式进入一家日本软件开发公司工作,主要负责基于Java和PHP的WEB系统开发工作。我于去年结识了Groovy,并同时开始了Grails的学习,现在正在利用Grails,跟朋友一起开发 番茄CMS。 

Grails最早使用的名称是“Groovy on Rails”,后来因为Ruby on Rails的David Heinemeier Hansson的抗议,改为现在的名称“Grails”。从名称不难看出,Grails其实就是Ruby on Rails的Groovy版。 
Groovy以短小精炼著称,相对于Java而言,基于Groovy开发的Grails不但可以节省近一半以上的代码,还可以像Ruby on Rails一样进行快捷开发。 
虽然无论是Groovy还是Grails本身出发点是让程序语言开发经简洁,但是,由于其本身尚处于发展阶段,所以个人建议,如果想要学习Grails,最好先具有一定的Java开发经验。当然,如果你所在的团队里面有精通Java的前辈给你支持,就算没有开发经验也无所谓,因为无论是Groovy还是Grails,其本身是非常容易上手的。 
Grails本身是一项极具魅力的框架,具有以下特征: 

  1. 高效开发
    1. 因为使用Groovy语言开发,可以减少书写多余代码。
      Groovy语法中取出了Java语法中冗繁的部分,以类似于JavaScrpit脚本语言的风格进行编程,通常情况下,同样的处理,相比较于Java而言可以少写一半以上的代码,减轻程序员的工作强度。
    2. 模仿Ruby on Rails的WEB框架,通过快捷开发,可以缩短开发->公布周期。
      这一点虽然Java也可以做到,但是,Groovy的语法更容易理解,更容易吸纳新人。
    3. 设定配置不需要XML文件,直接使用Groovy更加直观。
      虽然使用XML进行配置可以把程序语言和配置内容分开,但是,稍微管理不善,XML反而会让系统变得无比复杂。例如,Struts、Hibernate都是在使用XML方面的反面教材。所以等Java5支持标签之后,这些框架的很多设定内容又都放到程序里面了。
      而Grails直接支持使用Groovy文件设定,从无论是程序调用系统设定信息,还是,系统设定文件调用定量都非常简单、易懂。
    4. 建立开发环境更加爱容易
      无论是命令行还是,Eclipse等IDE上的插件,都可以快速的构建开发环境,这一点是以往Java无法比拟的。
  2. 高度兼容现有Java系统。
    Groovy是在Java脚本引擎上运行的脚本语言,所以,Grails归根结底就是用Groovy写的Java。
    无论是现有的Java类库,还是现有运行的系统,都可以近乎完美的与Grails结合。而且,程序员可以根据需要,直接用Java开发Grails程序。


无论跟以往Java的框架,还是跟Ruby on Rails相比,Grails都有它不可代替的特性,但是,为什么Grails没有像Ruby那样普及开呢? 我总结了如下Grails的致命弱项: 
  1. 高效开发
    如何提高开发团队的工作效率,其实只有两点:一是不返工、二是习惯适应。
    前者是软件开发管理和设计的范畴,与本文无关。后者习惯适应是指,团队成员对沟通模式,以及生产流程已经适应,并逐渐让这些方式成为习惯。
    Groovy语法简单,Grails使用方便,虽然这为开发人员适应其开发模式提供了前提,但是,Grails文档资料稀少,在真正适应前需要逾越的瓶颈很大。
    其特有的使用方法反而成为他难以普及的瓶颈之一。
    重要的是,最终取决于开发效率高低的是管理,而非某项技术,所以,跟Grails相比,传统的Java、Ruby、甚至PHP的风险更低,开发成本自然也低;普及度高,容易找到相应技术人员。
  2. 高度兼容现有Java系统。
    这本身是Grails的长处,但是,Groovy归根结底还是Java,一旦出现错误,还要去看Java。
    虽然Groovy也好,Grails也好,本身都很容易掌握,但是,如果不熟悉Java,很难在商业开发中运用自如。


虽然,依照目前的大环境,将Grails用于商业开发有一定风险,但对这个新生事物我个人还是充满信心的。 
原因有下:
  1. Grails的开发团队隶属于SpringSource,其实力不言而喻
  2. 已经有很多类似于LinkedIn这样的大型系统在使用Grails,他们可以成功,我们也可以
  3. 我在番茄CMS开发当中,确实体验到了Grails开发的轻快性,只要把Grails开发相关的知识与大家共享,掌握Grails开发技术的人就会越来越多。


无论任何技术都要有一个成长过程,Grails的最大缺点就是资料太少。我相信,如果每个喜欢Grails的朋友都能无私的把开发经验分享出来,Grails大规模普及的那一天离我们并不遥远。 

缺乏开发经验,但是喜欢Grails也不用着急,Grails在成长,你也可以成长。番茄CMS开发团队愿意尽自己的能力帮助每一个喜欢Grails的同仁,并衷心希望我们可以携手共同进步。 

原文:http://www.loveapple.cn/app/Grails/first

1. 简介 2. 起步 2.1 下载并安装Grails 2.2 创建一个Grails应用 2.3 Hello World示例 2.4 使用IDE 2.5 规约配置 2.6 运行Grails应用 2.7 测试Grails应用 2.8 部署Grails应用 2.9 所支持的Java EE容器 2.10 创建工件 2.11 生成Grails应用 3. 配置 3.1 基本配置 3.1.1 内置选项 3.1.2 日志 3.2 环境 3.3 数据源 3.3.1 数据源和环境 3.3.2 JNDI数据源 3.3.3 自动数据库移植 3.4 外部配置 3.5 定义版本 4. 命令行 4.1 创建Gant脚本 4.2 可复用的Grails脚本 4.3 脚本中的事件 4.4 Ant和Maven 5. 对象关系映射(GORM) 5.1 快速指南 5.1.1 基本的CRUD 5.2 在GORM中进行领域建模 5.2.1 GORM中的关联 5.2.1.1 一对一 5.2.1.2 一对多 5.2.1.3 多对多 5.2.2 GORM的组合 5.2.3 GORM的继承 5.2.4 集合、列表和映射 5.3 持久化基础 5.3.1 保存和更新 5.3.2 删除对象 5.3.3 级联更新和删除 5.3.4 立即加载和延迟加载 5.3.4 悲观锁和乐观锁 5.4 GORM查询 5.4.1 动态查器 5.4.2 条件查询 5.4.3 Hibernate查询语言 5.5 高级GORM特性 5.5.1 事件和自动实现时间戳 5.5.2 自定义ORM映射 5.5.2.1 表名和列名 5.5.2.2 缓存策略 5.5.2.3 继承策略 5.5.2.4 自定义数据库标识符 5.5.2.5 复合主键 5.5.2.6 数据库索引 5.5.2.7 乐观锁和版本定义 5.5.2.8 立即加载和延迟加载 5.6 事务编程 5.7 GORM和约束 6. Web层 6.1 控制器 6.1.1 理解控制器和操作 6.1.2 控制器和作用域 6.1.3 模型和视图 6.1.4 重定向和链 6.1.5 控制器拦截器 6.1.6 数据绑定 6.1.7 XML和JSON响应 6.1.8 上传文件 6.1.9 命令对象 6.2 Groovy Server Pages 6.2.1 GSP基础 6.2.1.1 变量和作用域 6.2.1.2 逻辑和迭代 6.2.1.3 页面指令 6.2.1.4 表达式 6.2.2 GSP标签 6.2.2.1 变量和作用域 6.2.2.2 逻辑和迭代 6.2.2.3 搜索和过滤 6.2.2.4 链接和资源 6.2.2.5 表单和字段 6.2.2.6 标签作为方法调用 6.2.3 视图和模板 6.2.4 使用Sitemesh布局 6.3 标签库 6.3.1 简单标签 6.3.2 逻辑标签 6.3.3 迭代标签 6.3.4 标签命名空间 6.4 URL映射 6.4.1 映射到控制器和操作 6.4.2 嵌入式变量 6.4.3 映射到视图 6.4.4 映射到响应代码 6.4.5 映射到HTTP方法 6.4.6 映射通配符 6.4.7 自动重写链接 6.4.8 应用约束 6.5 Web Flow 6.5.1 开始和结束状态 6.5.2 操作状态和视图状态 6.5.3 流执行事件 6.5.4 流的作用域 6.5.5 数据绑定和验证 6.5.6 子流程和会话 6.6 过滤器 6.6.1 应用过滤器 6.6.2 过滤器的类型 6.6.3 过滤器的功能 6.7 Ajax 6.7.1 用Prototype实现Ajax 6.7.1.1 异步链接 6.7.1.2 更新内容 6.7.1.3 异步表单提交 6.7.1.4 Ajax事件 6.7.2 用Dojo实现Ajax 6.7.3 用GWT实现Ajax 6.7.4 服务端的Ajax 6.8 内容协商 7. 验证 7.1 声明约束 7.2 验证约束 7.3 客户端验证 7.4 验证和国际化 8. 服务层 8.1 声明式事务 8.2 服务的作用域 8.3 依赖注入和服务 8.4 使用Java的服务 9. 测试 9.1 单元测试 9.2 集成测试 9.3 功能测试 10. 国际化 10.1 理解信息绑定 10.2 改变Locales 10.3 读取信息 11. 安全 11.1 预防攻击 11.2 字符串的编码和解码 11.3 身份验证 11.4 关于安全的插件 11.4.1 Acegi 11.4.2 JSecurity 12 插件 12.1 创建和安装插件 12.2 理解插件的结构 12.3 提供基础的工件 12.4 评估规约 12.5 参与构建事件 12.6 参与运行时配置 12.7 运行时添加动态方法 12.8 参与自动重载 12.9 理解插件加载的顺序 13. Web服务 13.1 REST 13.2 SOAP 13.3 RSS和Atom 14. Grails和Spring 14.1 Grails的支柱 14.2 配置其他Bean 14.3 通过Beans DSL运行Spring 14.4 配置属性占位 14.5 配置属性重载 15. Grails和Hibernate 15.1 通过Hibernate注释进行映射 15.2 深入了解 16. 脚手架
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值