Grails 敏捷项目开发 2011.6.12 rain
@rainboyan <ul><li>Blogger @  http:// rainboyan.com </li></ul><ul><li>Twitter @rainboyan </li></ul><ul><li>目前从事移动 BI , And...
网站及作品 <ul><li>GroovyFans.org </li></ul><ul><li>LinkQ.Net </li></ul><ul><li>GeekPark.In </li></ul><ul><li>Ratte – http://co...
来此目的? <ul><li>学习 Groovy&Grails  于 2007 年初,用于项目开发于 2008 年秋 </li></ul><ul><li>Java  框架众多,选择的自由亦痛苦,直到遇到了 Groovy 、 Grails </li...
“simplify the life of developers” - Guillaume Laforge, 2005
目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
<ul><li>介绍 </li></ul><ul><li>Groovy - http://groovy.codehaus.org </li></ul><ul><li>Grails  - http://grails.org </li></ul>
Groovy 语言 <ul><li>基于 JVM 的动态语言 </li></ul><ul><li>借鉴了 Python 、 Ruby 、 Smalltalk </li></ul><ul><li>直接编译成字节码 </li></ul><ul><l...
Java  程序 <ul><li>public   class  HelloWorld { </li></ul><ul><li>  private  String name; </li></ul><ul><li>  public void  s...
Groovy  程序 <ul><li>public   class  HelloWorld { </li></ul><ul><li>  private  String name; </li></ul><ul><li>  public void ...
Groovier  版本 <ul><li>class  HelloWorld { </li></ul><ul><li>  String name </li></ul><ul><li>  String greet() { </li></ul><u...
更多简洁语法 <ul><li>Lists </li></ul><ul><ul><li>def numbers = [1, 2, 3, 4, 5] </li></ul></ul><ul><li>Maps </li></ul><ul><ul><li...
GString <ul><li>def  person = “John” </li></ul><ul><li>def  letter = “““${ new  Date()} </li></ul><ul><li>Dear ${person}, ...
Closures <ul><li>def printNum = { </li></ul><ul><li>println it </li></ul><ul><li>} </li></ul><ul><li>(1..9).each { printNu...
Java 5  特性 <ul><li>标注 (Annotation) ,泛型 (generic) ,静态引入 (static import) ,枚举 (enum) ,变参 (varargs)  (1.5.0 版本 ) </li></ul><ul...
其他 <ul><li>GDK </li></ul><ul><li>GSQL </li></ul><ul><li>XML&JSon </li></ul><ul><li>Builders </li></ul><ul><li>MOP </li></u...
Grails 框架 <ul><li>参照了 RoR 的实现思想, CoC </li></ul><ul><li>构建与 Java 和 Groovy 之上 </li></ul><ul><li>使用了稳定的开源框架 </li></ul><ul><li...
Why Grails ? <ul><li>更少的代码,高效、高产、高质量 </li></ul><ul><li>开源,基于更多的开源框架,例如 Spring , Hibernate , SiteMesh </li></ul><ul><li>与 J...
Grails  特性 <ul><li>Groovy </li></ul><ul><li>MVC </li></ul><ul><li>GORM </li></ul><ul><li>Plugins </li></ul><ul><ul><li>500...
谁在用 Grails ? <ul><li>LinkedIn </li></ul><ul><li>ManyMoon </li></ul><ul><li>Sky.com </li></ul><ul><li>balsamiq.com </li></ul>
Grails more <ul><li>依赖库升级: Groovy 1.8, Spring 3.1, Hibernate 3.6  Tomcat 7 (1.4) </li></ul><ul><li>静态资源模块化处理  (1.4) </li><...
Grails more>> <ul><li>OSGi (2.0) </li></ul><ul><li>Security 的抽象内置支持  (2.0) </li></ul><ul><li>实现全部的 Hibernate 配置选项  (2.0) <...
目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
<ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则 </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul><...
<ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则   </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul...
1 )迭代开发 <ul><li>美好愿景 </li></ul><ul><ul><li>“ 灯塔”的作用 </li></ul></ul><ul><li>快速原型 </li></ul><ul><ul><li>开始要简单 </li></ul></ul...
Grails  命令集 <ul><li>grails create-app demo </li></ul><ul><li>grails test-app </li></ul><ul><li>grails run-app </li></ul><u...
<ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则   </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul...
2 )测试先行 <ul><li>TDD 是否有必要? </li></ul><ul><li>单元测试和集成测试、功能测试 </li></ul><ul><li>测试代码的考量和维护 </li></ul>
Grails  测试支持 <ul><li>Unit Testing </li></ul><ul><li>Integration Testing </li></ul><ul><li>Functional Testing </li></ul>
Grails  测试之: 单元测试 <ul><li>GrailsUnitTestCase { </li></ul><ul><li>  mockFor(class, loose=false) </li></ul><ul><ul><li>mockD...
Grails  测试之: 集成测试 <ul><li>GrailsTestCase { </li></ul><ul><li>} </li></ul>
Grails  测试之: 功能测试 <ul><li>Canoo Webtest </li></ul><ul><li>G-Func </li></ul><ul><li>Selenium-RC </li></ul><ul><li>WebDriver...
<ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则   </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul...
3 )精简代码 <ul><li>使用脚手架( </li></ul><ul><ul><li>def scaffold = Domain </li></ul></ul><ul><li>使用代码模板生成 </li></ul><ul><ul><li>g...
<ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则   </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul...
4 )用好工具 <ul><li>IDE </li></ul><ul><ul><li>Eclipse </li></ul></ul><ul><ul><li>IDEA </li></ul></ul><ul><ul><li>STS </li></ul...
<ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则   </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul...
5 )代码复用 <ul><li>基于 Plugin 系统的模块化开发 </li></ul><ul><ul><li>grails create-app app-plugin </li></ul></ul><ul><li>OSGi </li></u...
目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
<ul><li>案例 </li></ul><ul><li>LinkedIn </li></ul><ul><li>ManyMoon </li></ul><ul><li>Sky.com </li></ul><ul><li>balsamiq.com ...
目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
<ul><li>总结 </li></ul><ul><li>语言不是问题 </li></ul><ul><ul><li>容易学习,几乎直接兼容原有 Java 代码 </li></ul></ul><ul><li>性能不是问题 </li></ul><u...
<ul><li>Q&A </li></ul>?
Let’s just do it!
Upcoming SlideShare
Loading in...5
×

Grails敏捷项目开发

1,888

Published on

在2011年6月份珠三角技术沙龙深圳会场分享的主题

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,888
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 1 、 OO 2 、 MOP
  • 基于 #grails 的社会化项目管理初创公司 Manymoon 被 Salesforce.com 收购了 http:// bit.ly/dUbiJM
  • Grails 1.4 Dependency Updates: Groovy 1.8, Spring 3.1, Hibernate 3.6 and Tomcat 7 Agent Based Reloading Better Plugin Usage Tracking Better Java Integration (Expose GORM API via AST transformations) Improved Scaffolding UI with HTML5 Enhancements Improved Static Resource Handling New Mixin-based unit testing support Binary plugins Replace Prototype With jQuery Replace HSQLDB with H2 GORM Enhancements Schema Migrations Reverse Engineering Abstract Inheritance Implement findByOrCreate (or similar)
  • Grails敏捷项目开发

    1. 1. Grails 敏捷项目开发 2011.6.12 rain
    2. 2. @rainboyan <ul><li>Blogger @ http:// rainboyan.com </li></ul><ul><li>Twitter @rainboyan </li></ul><ul><li>目前从事移动 BI , Android/iOS </li></ul><ul><li>读书、户外、跑步、摄影 </li></ul>
    3. 3. 网站及作品 <ul><li>GroovyFans.org </li></ul><ul><li>LinkQ.Net </li></ul><ul><li>GeekPark.In </li></ul><ul><li>Ratte – http://code.google.com/p/ratte </li></ul>
    4. 4. 来此目的? <ul><li>学习 Groovy&Grails 于 2007 年初,用于项目开发于 2008 年秋 </li></ul><ul><li>Java 框架众多,选择的自由亦痛苦,直到遇到了 Groovy 、 Grails </li></ul>
    5. 5. “simplify the life of developers” - Guillaume Laforge, 2005
    6. 6. 目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
    7. 7. 目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
    8. 8. <ul><li>介绍 </li></ul><ul><li>Groovy - http://groovy.codehaus.org </li></ul><ul><li>Grails - http://grails.org </li></ul>
    9. 9. Groovy 语言 <ul><li>基于 JVM 的动态语言 </li></ul><ul><li>借鉴了 Python 、 Ruby 、 Smalltalk </li></ul><ul><li>直接编译成字节码 </li></ul><ul><li>开放源码 ASL 2.0 </li></ul><ul><li>比较完整的生态体系 </li></ul><ul><li>1.0 发布于 2007.1.2 </li></ul>
    10. 10. Java 程序 <ul><li>public class HelloWorld { </li></ul><ul><li> private String name; </li></ul><ul><li> public void setName(String name) { </li></ul><ul><li>this .name = name; </li></ul><ul><li> } </li></ul><ul><li> public String getName() { </li></ul><ul><li>return name; </li></ul><ul><li>} </li></ul><ul><li> public String greet() { </li></ul><ul><ul><li>return “Hello ” + name; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li> public static void main(String[] args) { </li></ul><ul><li>HelloWorld helloWorld = new HelloWorld(); </li></ul><ul><li>helloWorld.setName(“Groovy”); </li></ul><ul><li>System.out.printn(helloWorld.greet());; </li></ul><ul><li> } </li></ul><ul><li>} </li></ul>
    11. 11. Groovy 程序 <ul><li>public class HelloWorld { </li></ul><ul><li> private String name; </li></ul><ul><li> public void setName(String name) { </li></ul><ul><li>this .name = name; </li></ul><ul><li> } </li></ul><ul><li> public String getName() { </li></ul><ul><li>return name; </li></ul><ul><li>} </li></ul><ul><li> public String greet() { </li></ul><ul><ul><li>return “Hello ” + name; </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li> public static void main(String[] args) { </li></ul><ul><li>HelloWorld helloWorld = new HelloWorld(); </li></ul><ul><li>helloWorld.setName(“Groovy”); </li></ul><ul><li>System.out.printn(helloWorld.greet());; </li></ul><ul><li> } </li></ul><ul><li>} </li></ul>
    12. 12. Groovier 版本 <ul><li>class HelloWorld { </li></ul><ul><li> String name </li></ul><ul><li> String greet() { </li></ul><ul><ul><li> “ Hello $name“ </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>} </li></ul><ul><li>def helloWorld = new HelloWorld(name: “Groovy”) </li></ul><ul><li>printn helloWorld.greet() </li></ul><ul><li> </li></ul>
    13. 13. 更多简洁语法 <ul><li>Lists </li></ul><ul><ul><li>def numbers = [1, 2, 3, 4, 5] </li></ul></ul><ul><li>Maps </li></ul><ul><ul><li>def colors = [red: ‘ 红’ , yellow: ‘ 黄’ , blue: ‘ 蓝’ ] </li></ul></ul><ul><li>Ranges </li></ul><ul><ul><li>def ages = 18..60 </li></ul></ul>
    14. 14. GString <ul><li>def person = “John” </li></ul><ul><li>def letter = “““${ new Date()} </li></ul><ul><li>Dear ${person}, </li></ul><ul><li>this is a Groovy letter!””” </li></ul><ul><li>println letter </li></ul>
    15. 15. Closures <ul><li>def printNum = { </li></ul><ul><li>println it </li></ul><ul><li>} </li></ul><ul><li>(1..9).each { printNum it } </li></ul>
    16. 16. Java 5 特性 <ul><li>标注 (Annotation) ,泛型 (generic) ,静态引入 (static import) ,枚举 (enum) ,变参 (varargs) (1.5.0 版本 ) </li></ul><ul><li>AST (*1.8.0 版本 ) </li></ul>
    17. 17. 其他 <ul><li>GDK </li></ul><ul><li>GSQL </li></ul><ul><li>XML&JSon </li></ul><ul><li>Builders </li></ul><ul><li>MOP </li></ul><ul><li>DSL </li></ul>
    18. 18. Grails 框架 <ul><li>参照了 RoR 的实现思想, CoC </li></ul><ul><li>构建与 Java 和 Groovy 之上 </li></ul><ul><li>使用了稳定的开源框架 </li></ul><ul><li>1.0 发布于 2008.2.4 </li></ul>
    19. 19. Why Grails ? <ul><li>更少的代码,高效、高产、高质量 </li></ul><ul><li>开源,基于更多的开源框架,例如 Spring , Hibernate , SiteMesh </li></ul><ul><li>与 Java 集成,能够复用以前的项目库 </li></ul>
    20. 20. Grails 特性 <ul><li>Groovy </li></ul><ul><li>MVC </li></ul><ul><li>GORM </li></ul><ul><li>Plugins </li></ul><ul><ul><li>500+ , UI , Ajax , Testing , Security , Web Services </li></ul></ul>
    21. 21. 谁在用 Grails ? <ul><li>LinkedIn </li></ul><ul><li>ManyMoon </li></ul><ul><li>Sky.com </li></ul><ul><li>balsamiq.com </li></ul>
    22. 22. Grails more <ul><li>依赖库升级: Groovy 1.8, Spring 3.1, Hibernate 3.6 Tomcat 7 (1.4) </li></ul><ul><li>静态资源模块化处理 (1.4) </li></ul><ul><li>UI 使用 HTML5 (1.4) </li></ul><ul><li>jQuery 默认支持 (1.4) </li></ul><ul><li>GORM 抽象继承的支持及数据库的逆向工程 (1.4) </li></ul>
    23. 23. Grails more>> <ul><li>OSGi (2.0) </li></ul><ul><li>Security 的抽象内置支持 (2.0) </li></ul><ul><li>实现全部的 Hibernate 配置选项 (2.0) </li></ul>
    24. 24. 目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
    25. 25. <ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则 </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul><li>用好工具,“工欲善其事必先利其器” </li></ul><ul><li>软件复用,模块化开发 </li></ul>
    26. 26. <ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则 </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul><li>用好工具,“工欲善其事必先利其器” </li></ul><ul><li>软件复用,模块化开发 </li></ul>
    27. 27. 1 )迭代开发 <ul><li>美好愿景 </li></ul><ul><ul><li>“ 灯塔”的作用 </li></ul></ul><ul><li>快速原型 </li></ul><ul><ul><li>开始要简单 </li></ul></ul><ul><li>小版本发布 </li></ul><ul><ul><li>轻装上路,保持节奏,快速前进! </li></ul></ul><ul><li>逐步优化 </li></ul><ul><ul><li>没有最好,只有更好! </li></ul></ul><ul><li>跟踪反馈 </li></ul><ul><ul><li>继续前进的动力 </li></ul></ul>
    28. 28. Grails 命令集 <ul><li>grails create-app demo </li></ul><ul><li>grails test-app </li></ul><ul><li>grails run-app </li></ul><ul><li>grails war </li></ul><ul><li>grails set-version </li></ul>
    29. 29. <ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则 </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul><li>用好工具,“工欲善其事必先利其器” </li></ul><ul><li>软件复用,模块化开发 </li></ul>
    30. 30. 2 )测试先行 <ul><li>TDD 是否有必要? </li></ul><ul><li>单元测试和集成测试、功能测试 </li></ul><ul><li>测试代码的考量和维护 </li></ul>
    31. 31. Grails 测试支持 <ul><li>Unit Testing </li></ul><ul><li>Integration Testing </li></ul><ul><li>Functional Testing </li></ul>
    32. 32. Grails 测试之: 单元测试 <ul><li>GrailsUnitTestCase { </li></ul><ul><li> mockFor(class, loose=false) </li></ul><ul><ul><li>mockDomain(class, testInstances=) </li></ul></ul><ul><li> mockLogging(class, enableDebug=false) </li></ul><ul><li> mockController(class) </li></ul><ul><li>mockTagLib(class) </li></ul><ul><li>} </li></ul>
    33. 33. Grails 测试之: 集成测试 <ul><li>GrailsTestCase { </li></ul><ul><li>} </li></ul>
    34. 34. Grails 测试之: 功能测试 <ul><li>Canoo Webtest </li></ul><ul><li>G-Func </li></ul><ul><li>Selenium-RC </li></ul><ul><li>WebDriver </li></ul><ul><li>Geb </li></ul>
    35. 35. <ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则 </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul><li>用好工具,“工欲善其事必先利其器” </li></ul><ul><li>软件复用,模块化开发 </li></ul>
    36. 36. 3 )精简代码 <ul><li>使用脚手架( </li></ul><ul><ul><li>def scaffold = Domain </li></ul></ul><ul><li>使用代码模板生成 </li></ul><ul><ul><li>grails gernerate-all com.~.domainClass </li></ul></ul><ul><li>使用插件 </li></ul><ul><ul><li>grails create-plugin plugin-app </li></ul></ul><ul><li>使用标签 </li></ul><ul><ul><li>grails create-tag-lib foo </li></ul></ul>
    37. 37. <ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则 </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul><li>用好工具,“工欲善其事必先利其器” </li></ul><ul><li>软件复用,模块化开发 </li></ul>
    38. 38. 4 )用好工具 <ul><li>IDE </li></ul><ul><ul><li>Eclipse </li></ul></ul><ul><ul><li>IDEA </li></ul></ul><ul><ul><li>STS </li></ul></ul><ul><li>构建工具: </li></ul><ul><ul><li>GAnt </li></ul></ul><ul><ul><li>GMaven </li></ul></ul><ul><ul><li>Gradle </li></ul></ul>
    39. 39. <ul><li>开发实践 </li></ul><ul><li>迭代开发, KISS 原则 </li></ul><ul><li>测试先行, TDD 实践 </li></ul><ul><li>代码精炼, DRP 原则 </li></ul><ul><li>用好工具,“工欲善其事必先利其器” </li></ul><ul><li>代码复用,模块化开发 </li></ul>
    40. 40. 5 )代码复用 <ul><li>基于 Plugin 系统的模块化开发 </li></ul><ul><ul><li>grails create-app app-plugin </li></ul></ul><ul><li>OSGi </li></ul><ul><ul><li>通过 osgi 插件 </li></ul></ul>
    41. 41. 目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
    42. 42. <ul><li>案例 </li></ul><ul><li>LinkedIn </li></ul><ul><li>ManyMoon </li></ul><ul><li>Sky.com </li></ul><ul><li>balsamiq.com </li></ul>
    43. 43. 目录 <ul><li>介绍 </li></ul><ul><li>开发实践 </li></ul><ul><li>案例 </li></ul><ul><li>总结 </li></ul><ul><li>Q&A </li></ul>
    44. 44. <ul><li>总结 </li></ul><ul><li>语言不是问题 </li></ul><ul><ul><li>容易学习,几乎直接兼容原有 Java 代码 </li></ul></ul><ul><li>性能不是问题 </li></ul><ul><ul><li>1.4 的性能已经快接近 JSP </li></ul></ul><ul><li>社区不是问题 </li></ul><ul><ul><li>需要更多人参与,立即动手开始使用! </li></ul></ul><ul><li>更好的建议 </li></ul><ul><ul><li>“ 如果你正在开发一个新的项目,优先考虑使用 Grails 或者 Spring Roo 。”来自 Rod </li></ul></ul>
    45. 45. <ul><li>Q&A </li></ul>?
    46. 46. Let’s just do it!
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×