- 浏览: 207877 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
落叶知秋__:
indexPath能用?
UITableView 删除特定的CELL -
xhanxhanxhan:
Hooopo 写道puts 返回结果是nilnil and r ...
一个脚本×关键词“百度说吧”你懂的 -
Hooopo:
puts 返回结果是nilnil and return 这个是 ...
一个脚本×关键词“百度说吧”你懂的 -
nono123:
谢谢!
不用信用卡而申請其他地區itunes賬號的方法 -
BarryWei:
lordhong 写道多谢分享, 学习一下, iPhone我都 ...
永远的扫雷英雄(开源)
===转至 http://kiwi.csie.chu.edu.tw/blog/archives/133
本篇文章從PHP及Web程式設計師的角度,逐漸帶出Ruby on Rails這個Web Application Framework及其優點,架構觀念。接下來要簡介Ruby及Rails的學習重點。
Web應用程式
記得在上次的的主題,重新探討Cakephp, Ruby on Rails與MVC ,我大力地闡述能否實做商業邏輯,或是掌握Model的功用是多麼的重要。而老話一句,這個問題比較會出現在中大型的Web應用程式中,如果說你正在寫的是小小的網頁作業,或許本文對你只有參考的價值。
我會這樣說,是因為我們已經邁向2008年,Web應用程式在Google大神的帶領之下 ,逐漸開始在放出光芒。
在2005年以前,對於很多使用者而言,瀏覽器只不過是個看網頁的東西。而網頁對大多數設計者而言,製作網頁就像在畫一幅畫。動態網頁設計被分做四大領域,平面設計 ,結構設計 ,行為設計 ,伺服端程式設計 , 而這些設計可能會各別使用典型的Photoshop(or Flash),HTML/CSS Editor,Javascript Editor,PHP來完成。然而我舉PHP的例子,大家也應該可以想像的到,它是這五六年間最熱門的伺服端程式語言,如phpbb, phpmyadmin,xoops等高水準,開放原碼的應用程式大家早就耳熟能詳。相較於當時任何可以做出成品的伺服端語言,其直譯式語言的優點,快速編 輯,方便佈局(deploy) ...說到要寫動態網頁,PHP真是首選!
而這些東西在2006年之後就起了大變化,主要還是因為使用者比以往需要更多從瀏覽器得到的資訊,不僅只是看個靜態的網頁,更是將資料傳送出去。當 人們開始這樣用Web表單不斷地把資料往Internet送,並期待畫面下一瞬間就有符合需求的東西的時候,已經不是在「看網頁」,而是在使用Web應用程式 。是的,Web應用程式這個名詞其實還並未真正的深植人心,因為非資訊領域的使用者他們對於Web的認知還是僅僅在於靜態網頁,而資訊領域相關的已經對Web有種使用視窗程式的印象。實際上不管是Google也好,博客來也好,大家都是在用Web應用程式。
從設計者的角度來看,大概在PHP成為主流的時候,重心已經從平面設計逐漸轉移到伺服端程式設計。舉個例來說,你會發現外包網頁製作工作室來製作官 方網頁的業者,在快要完工時,針對內容資料性及操作性正確與否的要求,遠比Flash動畫順暢度及效果還要來得優先(以往是剛好反過來,美工優先)。就像 你使用Word,先不管他的介面是否如Word 2007般炫麗,可是在程式上看到的的排版,跟列印出來紙張上的排版一定不能不一樣。由於PHP連結資料庫的功能相當穩定,解決了資料及操作性的問題後, 設計師們慢慢地就將焦點拉回到Web應用程式的反應速度上。包括平面設計師在內,許多人無一不想讓Web程式像是視窗程式一樣反應快速,也因此將大家遺忘 許久的Javascript找了回來。
PHP面對的問題
從2000年到現在,設計的重心大概是依照HTML -> PHP -> JS來演進,語言的特性也從Tag Language -> Script -> Pure OO Script演進。這樣子的演進,不僅說明了伺服端程式碼的彈性相當重要,因為你可以看見大家不再需要靜態的HTML而是可以產生動態HTML的PHP, 而更明顯的是,大家開始需要瀏覽器的彈性。
在這時代演進中,PHP程式設計師遇到許多問題像是:
- PHP並不是一個很好的物件導向語言,直到PHP5的時候雖然有,不過也不夠完整。
- PHP原本附的資料層函式及PDO,或者是Adodb,要進行複雜的關連設計與對應相當困難。能夠做到複雜關連的如Propel,卻又效能太差。
- 樣版引擎的優點是快速,可是只能稍微簡化畫面的結構問題,並未能解決商業邏輯與控制程式碼混雜問題。
- 綜合以上原因,如果你要撰寫一個有500個使用案例的大系統,會導致設計複雜化。
- Framework如Cakephp解決了不少上述問題,可是因為多數Framework開發週期過長而使得普及率未如想像中高。
- Web應用程式因為HTML,CSS等本來就需要打許多程式碼,但PHP也佔了相當多。因此要完成大系統,需要更多人力進行實際程式碼撰寫而無法將時間花在設計上,開發時程也相對拖長。
我們在面對的已經是上百個使用案例這樣的複雜Web應用程式,競爭對手如Adobe已經推出了AIR(前Apollo),微軟也推出了 ASP.Net Ajax與Silverlight。這些強勢的對手們,目標當然是更強的Web Framework。PHP的任何framework甚至函式庫,是否能有效地"Rapid Development"都是一個問題,更何況是要挑戰這些對手。
Ruby on Rails
Ruby on Rails這個Web Application Framework早在2004年7月的時候,就由David Heinemeier Hansson 率領著37signals 打造了一個專案管理系統叫做Basecamp 。 先不管Basecamp好不好用,而它帶來的影響力就是大家都會問說「這究竟是怎樣寫的?」,也跟著Web2.0的風潮風光了一陣子,之後Rails才逐 漸浮上抬面。一個軟體要有人用,在於設計符合使用者需求,而又讓他們感到習慣的介面。但如果今天所謂的使用者也就是寫程式的人,那他們的希望就是,要能夠 有效率地做出或者維護一個系統及其使用案例,有方便的API可以降低反覆打同一行程式碼的動作。
Rails的第一個最大的優點就是,他可以以同一個語言加上簡短的函式呼叫囊括結構(HTML),行為(Javascript),及伺服器程式語言(Ruby)設計 。
我自己都認為光這一點對很多人來說就是救星了。
至於第二大優點,那就多了~
對於一個有經驗的Web程式設計師而言 Rails具有下列優點:
- 簡短的函式呼叫,拯救你快殘廢的手指
- MVC的設計架構讓你的資料及商業邏輯,控制程式碼,畫面完全分開,"No More Spaghetti Code!"
- ActiveRecord讓你不需要撰寫SQL,並使用Object-Relational Mapping(物件-關連資料庫映射),與Hibernate同等級的關連功能存取資料庫
- ActionController讓你有完全控制HTTP Session, Cookie, Request, Response的能力,整合了REST改變以往你對資源控制的想法,幾個基本的method就讓你寫完CRUD(新增修改刪除)。
- ActionView讓你可以使用簡單的函式呼叫就產生複雜的HTML表單與Ajax Javascript程式碼。
- 專業的Web設計師都懂得要先思考整個網站的Layout在去建構各個畫面,使用Layout更能發揮你的專業。
- Rails不見得只是讓你Quick'n Dirty弄出個雛形,而且你絕對可以依賴Rails團隊的軟體品質而開發出更棒的產品。不怕你將Rails的功能挖完,只怕你還沒挖完Rails又出新功能!
對於一個Web程式設計新手 ,Rails帶給你的是:
- 採用Ruby這個純物件導向直譯式語言,怎樣寫都可以work的程式風格會讓你快速就上手。
- Rails在各種平台都有快速開發套件包,Windows是InstantRails ,Fedora6上打yum install rubygems即可。隨後在指令模式打上一行 gem install rubyworks -a,啥都幫你裝好。
- Aptana IDE (前RadRails)採用Eclipse開發而成,能控制Mongrel伺服器,也能除錯程式碼,將HTML,CSS,JS,Rails整合的相當好。
- 不會連MySQL,PostgreSQL?沒關係,把帳號密碼等資訊打在database.yml裡,還可以利用除錯Console測試連線。
- Rails可以使用Scaffold(鷹架)建立基本的CRUD,甚至還支援漂亮的Ajax,彈指之間你發現你已經寫完了,而還不敢相信自己寫完了。
- 既然畫面做完了,開始想怎樣修改既有的東西,利用Aptana下方工具列的Generators,你可以產生Model, Controller...等各種Rails程式碼框架,不用一一宣告半天。
- 嫌功能不夠多嗎?察看Aptana下方工具列的Rails Plugin,看看你想加啥功能!
- 低坡度的學習曲線讓你相當有成就感,不會像老前輩們以前天天踢鐵板踢到腳酸~
我相信Rails團隊是本持著對設計師們體諒的心,加上未來的夢想在設計整個framework,而不是在展現編程的實力堅強,這也是以往各種函式 庫做不出來的,相當值得所有設計師們學習。在撰寫這篇文章的時候,我也想過是否該提提Python及Django,因為他們也做的很好。
Ruby on Rails新手指南
Ruby
要使用Rails,非得學習Ruby不可。Ruby是一個純物件導向 的語言,意思是說在裡面任何東西,一個字串,一個數字都是一個物件。相較於其他script語言,ruby提供較多的與該物件相關且符合英文意義的成員函式,我們用ruby附的指令介面irb(interactive ruby)展示一下:
-
-1 .class
-
# output Fixnum
-
-1 .abs
-
# output 1
-
1 .succ
-
# output 2
-
1 .succ .succ
-
# output 3
可以看到1.succ會回傳1的successor(下一個數字)也就是2,而2的類別當然是Fixnum,也就是可以繼續呼叫succ,也因此有 1.succ.succ這種呼叫法。類似的作法在所有支援物件導向的語言都可見。而ruby不同的地方是他允許不加上"( )"便可以進行呼叫,只不過是沒有傳參數進去,也就是像VB一樣。設計師可以盡量用一行就可以描述一串程式動作,加上所有類別都提供相當實用的成員函式, 便產生非常簡潔的程式碼。
-
say = "I love Ruby"
-
puts say
-
# Output "I love Ruby"
-
# 字串提供"[ ]"成員函式來取得子字串,而下一行的功能就形同於取代
-
say[ 'love' ] = "*love*"
-
puts say.upcase
-
# Output "I *LOVE* RUBY"
-
-
# 下行程式碼展示了Fixnum的成員函式times,而傳入一個"{ } ",稱作為區塊(物件),如此這個區塊內的程式碼會被執行五次。
-
5 .times { puts say }
-
# Output "I *love* Ruby"
-
# five times
剛剛有提到,ruby是一個純OO的語言,在程式裡任何東西皆為物件,自然就有物件該有的特性。
如果你想要試試語法,可以使用irb,ruby附的編輯器scite,或者是http://tryruby.hobix.com/ 。初學者最常見到就是不知道該呼叫啥成員函式,你可以透過http://www.gotapi.com/rubyrails 去查,或者是任何物件都有一個methods函式可以呼叫,至少你可以掌握你有什麼。
而目前針對ruby語言個人認為比較值得看的參考,就是下列網址:
- http://www.zenspider.com/Languages/Ruby/QuickRef.html
- http://www.ruby-doc.org/docs/ProgrammingRuby/
- http://willh.org/cfc/wiki/index.php/Programming_Ruby,_1st_Edtion
如果你是熟悉Perl的老手,那Ruby對你而言是再快樂不過的事情了。.Net或是Java的也沒關係,花些時間深度地思考什麼叫做純物件導向,或者去看看Smalltalk,便能從語言面就瞭解Ruby。
Rails
因為Rails終究是一個MVC Framework,深讀MVC的內容是相當重要的,一個不小心你的程式碼就會有許多誤用,造成未來維護困難或效能緩慢。說起來就算是老手,一旦遇上趕專案的狀況,為了要快點寫完,很多時候也難逃誤用的命運。
但是在這裡我不詳述Rails的MVC究竟該怎樣去理解或開發,那是下一篇文章,先推薦Agile Web Development with Rails 及Ruby on Rails:Up and running 這兩本書好了。第一本書深入淺出,從觀念,目錄結構到撰寫流程解釋地相當詳盡,對於不是寫Rails的人來說,從中學習MVC也是相當棒的,可惜還沒有中文翻譯。第二本書以實做的角度直接切入程式碼,並且有中文翻譯,對於新手可以說是相當適合。
有關Rails的連結,最推薦的是:
不過既然是介紹,免不了還是要說明一下目錄結構。
Rails的目錄結構如上圖,基本上大部分的程式碼都在apps/,也就是代表你的應用程式本身,在此我們僅介紹撰寫過程中一定會碰到的目錄。
所有的Controller類別基本上都繼承自application.rb,程式碼就擺在controllers/,讓你可以在其中寫所有 Controller共用的成員函式。Helper就是載入到view裡讓view可以呼叫的成員函式,所以application_helper.rb 也是同樣的情況。models/相當單純不用多解釋,而views/除了必須新增和controller同名小寫的目錄來擺rhtml以外,也可以使用所 謂的Layout功能。Layout就是讓所有的view可以選擇性地套入一個主樣版,通常我們在畫面設計上都會做成網站的外框。
在Rails專案產生完畢後,最先就是要編輯database.yml來設定好資料庫系統的存取方式。值得注意的是Rails預設提供三種應用程式 運作使用的環境設定,有development,test,production,分別代表開發時,進行單元測試時,及正式上線時。這三個設定檔理論上應 該分別設定在不同的資料庫,而啟動到底是使用了哪一個設定檔,就是看傳遞給web server怎樣的參數。此外如果有要預先require的函式庫或是include的module,都可以放在environment.rb裡。 route.rb負責上述URL的結構,也就是說那個結構是可以改的。
一個Web應用程式一定有靜態資料,包括圖片,css與js,分別擺在public/的images/,stylesheets /,javascripts/,並且在view裡可以透過image_tag, include_javascript_tag, stylesheet_link_tag來呼叫。Rails提供了DB Migration功能,讓你可以輕鬆地撰寫資料庫schema,並且可以視database.yml轉移到不同的資料庫,利用產生器的話,會自動產生在 db/。
結論
未來Rails的發展方向,不僅會在REST這個主題,使用JRuby來整合Java,甚至是Offline應用程式都有相當大的可能性。以往我發 現,任何視窗上的應用程式,免不了就是一定要遇到作業系統本身帶來的問題,如同Windows,可能他一更新,就封鎖掉你的應用程式。Web是一個開放的 平台,提供很多的創意空間,也不見得要用同一種技術解決問題,有多種瀏覽器可以選擇,不會被侷限在一個平台上。
文章到最後,當然還是得跟各位提一下Rails的缺點,畢竟是以純物件導向撰寫的Web應用程式,所需要的代價就是大量的CPU記憶體資源。也因為 這一點,有很多Rails的開發者也積極地加入叢集化的支援。但畢竟電腦硬體只會越快不會越慢,Web未來的趨勢還是會以敏捷編程(Agile Programming)的方式來快速開發及佔有市場。
參考連結
- http://blog.roodo.com/rocksaying/archives/2680742.html
- http://www.lis186.com/?p=1750
- http://tw.myblog.yahoo.com/jimwayne-blog/article?mid=28&prev=29&next=27
- http://inet6.blogspot.com/2006/12/ruby-on-rails.html
- http://www.ibm.com/developerworks/cn/java/j-cb08016/
- http://www.ibm.com/developerworks/cn/linux/sdk/php/php_design/index.html
written by Kiwi \\ tags: mvc , rails , ruby
发表评论
-
一个脚本×关键词“百度说吧”你懂的
2010-09-19 22:06 1724很久没更新但还是陆续 ... -
Redmine with Gmail
2009-11-20 18:50 986折腾了很久,终于解决. 升级 redmine to 0 ... -
Rails 响应 content-type 请求出错
2009-07-30 10:28 1254昨晚使用rails 2.3.2 做测试服务器,结合iphone ... -
activeRecord delete by date time
2009-07-08 11:12 962根据时间删除数据。 Articl ... -
毕业设计 preview
2009-05-16 21:51 782Pluto CMS 基本上差不多了。 希望能通过答辩。 题目决 ... -
干004 子标题同下
2009-05-12 20:42 883Rails Suck !!!! 昨天困惑了一晚上,甚至以为自己 ... -
干003 连续撞车事件
2009-05-07 00:12 854先是在之前文章中的 template 撞车后 现在每次都是小心 ... -
Embeded Blocks for Rails Erb
2009-05-01 17:49 928費了幾乎兩個小時搞定這問題。很干 不過也終於解開個超級大謎團, ... -
這樣設計ROUTES規則可以不
2009-04-30 14:37 862覺得controller裡面文件有點亂,想通過建目錄來解決。 ... -
rails 2.3 的一個 bug?
2009-04-30 01:53 782class ForumPost < ActiveReco ... -
方便debug的rails插件 rails-footnotes
2009-04-29 22:52 1139起源於今天添加返回到之前頁面功能,用session實現,並加到 ... -
Trapped In Ruby on Rails Reserved Words
2009-04-27 00:25 906今天偷懒,也顺便试试能否通过 scaffold 来生成 cms ... -
RAILS I18N
2009-04-18 18:48 1220官方文章 Rails Internationalization ... -
震精!不是漏洞的漏洞
2009-04-18 12:38 0讓我們看下面的代碼: MODEL 用戶對應多條項目 ... -
Rails Tricks #2
2009-04-18 01:41 832个人摸索的一点点经验 Layout 如果 ... -
如何給Rails 寫插件
2009-04-16 15:11 912很簡單。備忘。 1 生成代碼 script/genera ... -
rake 常用命令
2009-04-14 22:11 1542rake db:abort_if_pending_migrat ... -
ruby爬虫 以及在ruby中通过ActiveRecord使用数据库
2009-04-14 22:02 1541今天写了个挺好玩的东西,看着数据库里面满满的数据,别提多开心了 ... -
Rails Tricks #1
2009-04-14 12:21 789《Agile Web Develop》这本书里面只是简单介绍了 ... -
rails 调用 lib库的内容
2009-03-28 19:54 2156这东西以前用过,今天写发现又忘记了。 翻看了下老代码应该是这样 ...
相关推荐
《Ruby on Rails 101》是一本介绍Ruby on Rails(简称RoR或ROR)的基础书籍,旨在为初学者提供一个全面而深入的学习框架。本书由Peter Marklund编写,包含了五天课程的演示文稿和相关资料,覆盖了从安装到实际应用...
在过去的几年中,《Ruby on Rails Tutorial》这本书被视为介绍使用 Rails 进行 Web 开发的先驱者。 在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on ...
本书《Ruby on Rails 实践》是一本指南,旨在向读者介绍Ruby on Rails框架的使用,并通过实践案例帮助读者掌握其全貌。本书适合已经了解HTML、JavaScript和CSS,并且对Ruby基础语法有所认识的开发者。即便读者没有...
Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails以其“约定优于配置”(Convention over Configuration)...
Ruby on Rails是一款基于Ruby语言的开源Web开发框架,它遵循MVC(模型-视图-控制器)架构模式,简化了Web应用的开发流程。在Linux环境下安装Ruby on Rails需要一系列的依赖包和步骤,本资源包提供了所需的所有组件,...
《Ruby on Rails 3 Tutorial》是一本专门为初学者设计的指南,旨在帮助读者快速掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby语言的一个开源框架,它采用MVC(Model-View-...
这本书主要面向初学者介绍Ruby on Rails这一Web开发框架。以下是书中涵盖的一些核心知识点: ##### 1. Ruby on Rails简介 - **定义**:Ruby on Rails(简称Rails)是一种用于Web应用程序开发的开源框架,基于Ruby...
《Ruby on Rails入门权威经典》是一本专门为初学者设计的指南,旨在帮助读者全面掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言的开源框架,以其“DRY(Don't Repeat ...
总之,《Ruby on Rails for Dummies》是一本全面介绍Rails开发的入门书籍,无论你是编程新手还是想从其他语言转战Rails,都能从中获益匪浅。通过阅读和实践书中的例子,你将能够掌握构建现代Web应用所需的技能,并...
### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...
本文将基于给定文件信息,详细介绍Ruby on Rails的手动安装步骤,旨在为初学者提供一份教学级的安装指南。 #### 安装前准备 - **Ruby 解释器**:需先安装Ruby解释器,建议选择稳定版本,如Ruby 1.8.6.111。 - **...
Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...
Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用程序的开发。Rails由David Heinemeier Hansson于2004年创建,它提倡“约定优于配置...
Ruby on Rails,简称Rails,是由David Heinemeier Hansson基于Ruby语言开发的一个开源Web应用程序框架。这个框架遵循“约定优于配置”(Convention over Configuration)的原则,致力于简化Web应用的开发流程,提高...
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在提升开发效率和代码的可读性。Rails以其“约定优于配置”的设计理念,以及“DRY(Don't Repeat ...
Ruby on Rails,简称Rails,是基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在使开发过程更加简洁高效。这个“ruby on rails 教程源码”很可能是为了辅助学习者深入理解Rails的...
Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可...