Download pdf - Ruby rails分享

Transcript
Page 1: Ruby rails分享

Ruby、Rails分享老宋老宋老宋老宋@2011-12-12@2011-12-12@2011-12-12@2011-12-12

Page 2: Ruby rails分享

Me

Ruby迷

Blog:Blog:Blog:Blog: http://rubyer.meGithub:Github:Github:Github: https://github.com/camelsongEmail:Email:Email:Email: [email protected]

Page 3: Ruby rails分享

语言趋势语言趋势语言趋势语言趋势

Page 4: Ruby rails分享

2011201120112011年11112222月 http://www.tiobe.com很不靠谱的排名

Page 5: Ruby rails分享

http://trends.builtwith.com/2011-10-24

如果还有人争论Ruby/Rails和Python哪个更适合Web开发,这个数据可以参考

Page 6: Ruby rails分享

http://trends.builtwith.com/2011-10-24

J2EE在企业级市场独占鳌头,现在盛产码农

Page 7: Ruby rails分享

PHP是中小网站最爱,我是草根我光荣 http://trends.builtwith.com/2011-10-24

Page 8: Ruby rails分享

http://trends.builtwith.com/2011-10-24

看来喜欢Ruby on Rails的人还是有的

Page 9: Ruby rails分享

基点虽小,但我们看中的是未来 http://trends.builtwith.com/2011-10-24

Page 10: Ruby rails分享

Python为啥下降这么快,难道是没给领导送礼 http://trends.builtwith.com/2011-10-24

Page 11: Ruby rails分享

Ruby介绍

Rails介绍

10分钟写博客

摘要摘要摘要摘要

Page 12: Ruby rails分享

Who Who Who Who is is is is on on on on Ruby on Rails?Ruby on Rails?Ruby on Rails?Ruby on Rails?

Page 13: Ruby rails分享
Page 14: Ruby rails分享

编程语言 开发框架

区别区别区别区别

Page 15: Ruby rails分享

http://www.ruby-lang.org

RubyRubyRubyRuby

Page 16: Ruby rails分享

Ruby 由日本人日本人日本人日本人 松本行弘(松本行弘(松本行弘(松本行弘(MatzMatzMatzMatz))))1995199519951995年发布

Page 17: Ruby rails分享

人们特别是电脑工程师们,常常从机人们特别是电脑工程师们,常常从机人们特别是电脑工程师们,常常从机人们特别是电脑工程师们,常常从机器着想。他们认为:器着想。他们认为:器着想。他们认为:器着想。他们认为: ““““这样做,机器就能运行的更快;这这样做,机器就能运行的更快;这这样做,机器就能运行的更快;这这样做,机器就能运行的更快;这样做,机器运行效率更高;这样做,样做,机器运行效率更高;这样做,样做,机器运行效率更高;这样做,样做,机器运行效率更高;这样做,机器就会怎样怎样怎样。机器就会怎样怎样怎样。机器就会怎样怎样怎样。机器就会怎样怎样怎样。”””” 实际上,我们需要从人的角度考虑实际上,我们需要从人的角度考虑实际上,我们需要从人的角度考虑实际上,我们需要从人的角度考虑问题,人们怎样编写程序或者怎样使问题,人们怎样编写程序或者怎样使问题,人们怎样编写程序或者怎样使问题,人们怎样编写程序或者怎样使用机器上应用程序。我们是主人,他用机器上应用程序。我们是主人,他用机器上应用程序。我们是主人,他用机器上应用程序。我们是主人,他们是仆人。们是仆人。们是仆人。们是仆人。

---- Matz Matz Matz Matz

Page 18: Ruby rails分享
Page 19: Ruby rails分享
Page 20: Ruby rails分享

SimplicitySimplicitySimplicitySimplicity

Page 21: Ruby rails分享

打印Hello world

Page 22: Ruby rails分享

RubyRubyRubyRuby就像超人,只穿内裤。就像超人,只穿内裤。就像超人,只穿内裤。就像超人,只穿内裤。

代码少到不能再少,代码少到不能再少,代码少到不能再少,代码少到不能再少,

简单到不能再简单。简单到不能再简单。简单到不能再简单。简单到不能再简单。

Page 23: Ruby rails分享

下面分别用下面分别用下面分别用下面分别用RubyRubyRubyRuby和和和和JavaJavaJavaJava实现相同功能实现相同功能实现相同功能实现相同功能

做一个比较。做一个比较。做一个比较。做一个比较。

Page 24: Ruby rails分享

Java

Ruby 不用写代码不用写代码不用写代码不用写代码

一段空程序

Page 25: Ruby rails分享

Ruby

Java

调用一个方法

Page 26: Ruby rails分享

Ruby

Java

逆转字符串

Page 27: Ruby rails分享

还敢说讨厌Ruby吗?

Page 28: Ruby rails分享

打印5次Hello world

Page 29: Ruby rails分享

完全完全完全完全面向面向面向面向对象对象对象对象

Page 30: Ruby rails分享

全都是对象,甚至包括数字和空

Page 31: Ruby rails分享

NaturalNaturalNaturalNatural

Page 32: Ruby rails分享

输出两天前的日期

Page 33: Ruby rails分享

一段Rspec测试代码

Page 34: Ruby rails分享

DynamicDynamicDynamicDynamic

Page 35: Ruby rails分享

给数字添加一个方法

Page 36: Ruby rails分享

让你疯狂的代码

Page 37: Ruby rails分享

Ruby的三个动态特性

• Duck Typing• Method Missing• 元编程

Page 38: Ruby rails分享
Page 39: Ruby rails分享

Duck TypingDuck TypingDuck TypingDuck Typing

Page 40: Ruby rails分享

最给力的代码

Page 41: Ruby rails分享

最给力的代码

Method Missing

Method Missing

Method Missing

Method Missing

Page 42: Ruby rails分享

Java

Ruby

Page 43: Ruby rails分享

元编程

Java

Ruby

Page 44: Ruby rails分享

闭包

Page 45: Ruby rails分享

Java使用内部类模拟闭包

打开连接关闭连接

处理迭代 处理异常

Page 46: Ruby rails分享

迭代

Page 47: Ruby rails分享

管理资源

Page 48: Ruby rails分享

“跨平台”

Page 49: Ruby rails分享

真正跨平台JJJJRRRRubyubyubyubyIronRubyIronRubyIronRubyIronRubyMacRubyMacRubyMacRubyMacRubyRubyJSRubyJSRubyJSRubyJSRubotoRubotoRubotoRubotoRubyRubyRubyRuby EnterpriseEnterpriseEnterpriseEnterprise EditionEditionEditionEdition

JavaJavaJavaJavaCCCC####ObjectObjectObjectObject----CCCCJSJSJSJSAndroidAndroidAndroidAndroid

Page 50: Ruby rails分享

JRuby 示例

Page 51: Ruby rails分享

Ruby is...• 跨平台跨平台跨平台跨平台

• 自动垃圾回收自动垃圾回收自动垃圾回收自动垃圾回收

• 解释性执行解释性执行解释性执行解释性执行

• 完全面向对象完全面向对象完全面向对象完全面向对象

• 动态动态动态动态

• 支持闭包支持闭包支持闭包支持闭包

• 容易测试容易测试容易测试容易测试

Page 52: Ruby rails分享
Page 53: Ruby rails分享

By DHH(David Heinemeier Hansson)@2003

Page 54: Ruby rails分享

我不认为Rails应该向外部世界屈服,恰恰相反,Rails正在有力地让外部世界向我们屈服。

by DHH

Page 55: Ruby rails分享
Page 56: Ruby rails分享
Page 57: Ruby rails分享

Convention Over Configuration约定优于配置

DRY(Don’t Repeat Yourself)

不要重复自己

REST(Representational State Transfer)

具象状态传输

Rails三原则

Page 58: Ruby rails分享

约定约定约定约定>>>>配置配置配置配置

Page 59: Ruby rails分享

1.添加连接库

2.配置连接字符串

3.打开连接

4.新建查找方法

5.调用查找方法

6.修改name7.保存记录

8.关闭连接

把Users表中name=ys的改为youshang

Page 60: Ruby rails分享

Rails访问数据库示例

Page 61: Ruby rails分享

比较下比较下比较下比较下JavaJavaJavaJava的的的的ORMORMORMORM框架框架框架框架HibernateHibernateHibernateHibernate和和和和RailsRailsRailsRails的的的的ORMORMORMORM框架框架框架框架ActiveActiveActiveActive RecordRecordRecordRecord。。。。你才知道你才知道你才知道你才知道HibernateHibernateHibernateHibernate真的弱爆了!真的弱爆了!真的弱爆了!真的弱爆了!

Page 62: Ruby rails分享

Hibernate 官方示例

Page 63: Ruby rails分享

ModelModelModelModel对象模型:OrderOrderOrderOrder

Page 64: Ruby rails分享

JavaJavaJavaJava 数据库映射数据库映射数据库映射数据库映射:::: OrderOrderOrderOrder

Page 65: Ruby rails分享

还有Service层、Dao层。

各层接口和实现类...

Page 66: Ruby rails分享

RailsRailsRailsRails出场了出场了出场了出场了

Page 67: Ruby rails分享

Rails中到处充满着约定3种环境约定(开发、生产、测试)单复数约定MVC瘦控制器,胖模型...

Page 68: Ruby rails分享

DDDDon'ton'ton'ton'tRRRRepeatepeatepeatepeatYYYYourselfourselfourselfourself

Page 69: Ruby rails分享

DRYGeneratorPartialsPlugins...

Page 70: Ruby rails分享

RESTRESTRESTREST

Page 71: Ruby rails分享

万物皆为URL

Page 72: Ruby rails分享

一切操作均是对一切操作均是对一切操作均是对一切操作均是对URLURLURLURL操作操作操作操作

Page 73: Ruby rails分享

CCCCreatereatereatereateRRRReadeadeadeadUUUUpdatepdatepdatepdateDDDDeleteeleteeleteelete

RESTRESTRESTRESTfulfulfulful操作符

PostPostPostPostGetGetGetGetPutPutPutPutDeleteDeleteDeleteDelete

HTTPHTTPHTTPHTTP动词

Page 74: Ruby rails分享

CCCCreatereatereatereateRRRReadeadeadeadUUUUpdatepdatepdatepdateDDDDeleteeleteeleteelete

RailsRailsRailsRails方法

showshowshowshow

editeditediteditupdateupdateupdateupdate

destroydestroydestroydestroy

indexindexindexindex

newnewnewnewcreatecreatecreatecreate

RESTRESTRESTRESTfulfulfulful操作符

Page 75: Ruby rails分享

操作 HTTPHTTPHTTPHTTP请求

URLURLURLURL Rails Rails Rails Rails 对应ActionActionActionAction

查看列表 GetGetGetGet http://my/posts indexindexindexindex

查看id=2的帖子 GetGetGetGet http://my/posts/2 showshowshowshow

新建贴子 GetGetGetGet http://my/posts/new newnewnewnew

保存帖子 PostPostPostPost http://my/posts createcreatecreatecreate

修改id=2的帖子 GetGetGetGet http://my/posts/2 editediteditedit

保存修改 UpdateUpdateUpdateUpdate http://my/posts/2 updateupdateupdateupdate

删除id=2的帖子 DeleteDeleteDeleteDelete http://my/posts/2 DestroyDestroyDestroyDestroy

Page 76: Ruby rails分享

More RailsAgile DevelopmentTDD(Test Driven Development)BDDGeneratorsLive on the edge

Page 77: Ruby rails分享

10101010分钟写博客分钟写博客分钟写博客分钟写博客

Page 78: Ruby rails分享

其实只要其实只要其实只要其实只要5555分钟分钟分钟分钟1.rails new blog2.cd blog3.rails g scaffold Post title:string

content:text4.rails server

现在就可以访问http://127.0.0.1:3000/posts

博客已经写好了。

Page 79: Ruby rails分享

My Blog-webMy Blog-webMy Blog-webMy Blog-web

Page 80: Ruby rails分享

My Blog-mobileMy Blog-mobileMy Blog-mobileMy Blog-mobile

Page 81: Ruby rails分享

Q&AQ&AQ&AQ&Ahttp://rubyer.mehttp://rubyer.mehttp://rubyer.mehttp://rubyer.me