38

Grails:下一代Java Web开发框架

  • Upload
    foxgem

  • View
    4.772

  • Download
    6

Embed Size (px)

Citation preview

选择太多

Struts、WebWork、Struts2、Tapestry、GWT、Wicket、Spring、My Face……

开发低效:

配置文件多、语法繁琐

(XML)

常见功能仍需大量手工操作

安全、国际化、Layout、过滤

器/拦截器、验证、URL映射、声明性事务、基本CRUD、ORM、Ajax……

Java作为开发语言的低表现力

严重地影响开发速度

缺乏对项目构建过程的直接支持 借助外部工具:

Ant/Maven/Gradle 从头手工编写构建脚本

没有统一标准的构建任务框架 编译、预处理、打包、测试、部署……

外部构建脚本难以直接切入项目构建的生命周期,如: 编译前/后

对于外部依赖缺乏好的管理

测试困难,TDD成本太高 Spring在这方面有相当大的改进

Java领域的Rails

一站式的开发框架

开发、测试、部署,全程命令驱动

开发

测试部署

平滑的学习曲线

语言:Groovy,最接近Java的动态语言,高表现力,致

力于消除Java语言带来的噪音

建立于广泛采用的Java工具基础之上:

Spring、Hibernate、Sitemesh、Quartz、Spring Security、Shiro、Lucene/Solr……

高生产率 Groovy的高表现力 CoC消除了80%的配置工作量

Scaffolding消除了大量的手工劳动

结合自动化脚本可进一步提高工作效率

大量企业应用中常见功能的DSL GORM、Job、Action、

Validation、i18n、Filter、Interception、Layout、Template、TagLib、GSP……

大量可用的Plugin

TDD不再是梦

直接支持DDD

Web 2.0/REST

保护遗留资产

其他 商业友好的开源许可证:Apache License, 2.0

商业公司的支持:VMWare

活跃的社区

社区快报:This Week in Grails(中文版:Grails每周观察)

摘自

《T

he

Def

init

ive

Gu

ide

toG

rail

s 》

安装:下载、解压、设置GRAILS_HOME

5分钟的例子:简单的用户CRUD grails create-app user

cd user

grails create-domain-class user

添加User对象的属性:name、address

grails generate-all user

grails run-app

http://localhost:8080/user

M:Domain Class 基于Hibernate

POGO 易于测试

运行时动态注入持久化

方法:save/list/delete

ORM DSL

约束:简化验证

查询:动态查找器、

Criteria DSL、HQL

事件&自动时戳

锁机制

乐观锁(缺省)

悲观锁,手工调用lock

编程性事务:

withTransaction

V:GSP 类JSP语法,可直接使用JSP标签

GSP标签库

内置表现力强大的标签库

自定义标签库简单、方便

Template

Layout

Ajax:<g:remote>标签库

C:Controller Action

Interceptor before和after

设置拦截条件

数据绑定

Command Object

XML & JSON响应

典型方法:render、redirect、chain

可限制允许访问的

HTTP方法

内置REST支持

内容协商

内置对Web Flow的支持

其他重要组件

Service 封装涉及多个Domain Class的业务逻辑

事务:声明性(缺省)和编程性

Filter 跨Controller拦截请求

3种类型: before、after和afterView

URL Mapping 自定义URL映射规则

测试

支持 单元测试

集成测试

功能测试

create-*命令会自动创建测试类

运行测试:grails test-app

测试完毕将产生测试报告

国际化

惯例简化i18n: default.null.message

消息保存于Message Bundle: messages(_Locale).properties

支持自动切换Locale: Request Header:Accept-

Language

支持手动切换Locale用于测

试:

/book/list?lang=es

标签库:<g:message>

Plugin

Grails的主要扩展点

可以动态地给类MixIn。

Plugin工程 = Grails普通工程 + 描述文件

零配置

简化功能在不同应用间的共享

现有Grails社区的插件(> 600): http://www.grails.org/plugin/category/all

配置 Groovy DSL,语法简洁

conf目录

环境

隔离不同运行环境的配置

在不同环境下执行命令:

grails [environment] [command name]

缺省3个环境:dev、prod和test

自动化脚本

解决Web应用常见安全问题

SQL注入:通过Domain Class存取数据

DoS:返回少量数据

跨站脚本/HTML/URL注入: 缺省对页面进行HTML转义

内置的链接标签(link、form、createLink、createLinkTo等)为防止代码注入会自动转义。

提供了codec,允许在呈现HTML、JavaScript和URL等数据时进行细粒度的转义。

按插件组织应用

应用

插件

插件

插件插件

……

敏捷开发环境: Git + Jenkins + Artifactory

测试 & 代码覆盖:

Spock

Geb

Coverage

代码质量:CodeNarc

数据迁移:Db Migarition

浅尝辄止,典型表现:

不读文档

不去了解Grails的底层支撑技术:

JSP/Servlet、Spring、Hibernate……

过于复杂的领域模型

错误的开发实践:

无版本控制、CI、测试……

按照静态语言的思路编写程序

Sky.com

Wired.com

LinkedIn

更多的案例: http://www.grails.org/Success+Stories

支持多数据源 支持多数据源的两阶段提交

静态资源管理

测试完全支持Spock AST Transformation应用到插件开发中

数据迁移 OSGi jQuery成为缺省的js库 采用Gradle作为构建系统

……

除了这些,几乎主流Java开源框架都支持Groovy。其余请参考:http://groovy.codehaus.org/Modules

https://spreadsheets.google.com/pub?key=0AtkkDCT2WDMXdC1HOEtnUHpCejJMbUhGeGJWUmh5dVE&hl=en&output=html

Grails官方站点:http://grails.org

Groovy Blogs:http://groovyblogs.org

GroovyQ:http://www.groovyq.net