成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解讀Ruby on Rails的成功秘籍

開發 后端
Ruby on Rails好像一直處于爭論的風口浪尖。大多數爭論的核心是其所宣稱的令人驚異的生產力,本文研究了使Ruby On Rails在某個領域如此高效率的折衷和設計決策。

在Java社區關于Ruby On Rails的爭論已經相當激烈并且在將來一段時間沒有停止的跡象。Rails的支持者稱贊它的驚人的效率,與Java開發相比效率大約是10:1。作為Java程序員,您下意識的反應是不相信任何宣傳過高的效率,因為您可能以前聽到過這些,然而實際讓您很失望。

Java 提倡者日益堅持Ruby on Rails是一個玩具,不能伸縮,會生成壞的代碼,并且只能開發簡單的應用程序。但是隨著對Rails的贊揚不斷出現(通常來自可信的來源),一項更加謹慎的任務是理解Rails能做好什么事情,并把它的思想帶回到Java平臺。在本文中,將探究為Rails帶來巨大效率的核心特性(即秘笈)。

Rails基本原理

Ruby on Rails框架不是大家所想的典型的應用程序開發框架。Rails 的創始人 David Heinemeier Hansson 通常把該框架稱為固執己見的軟件,并且他喜歡打破長期存在的約定。David 做出了非常有哲理性的決策并在整個框架中嚴格遵循這些決策。遍布于 Rails 內的核心觀點有:

◆無縫集成:Rails 聰明地利用了 Ruby 語言的***特性。它擴展了 Ruby,但您很難說出 Ruby 在哪里結束,Rails 從哪里開始。您也可以看到 Active Record(Rails 的持久引擎)和模型-視圖-控制器(MVC)框架之間進行了很好的集成。例如,您可以編寫三行代碼,創建一個表,然后立即為該模型生成用戶界面。

◆約定優于配置:為保持良好的靈活性,Java 框架保持了大量普遍的配置文件。Rails 不采用這種策略。它為方法、類、表和列采用普通的項目目錄結構和簡單普通的命名約定,以推斷哪些已配置在 Java 應用程序中。結果是,Rails 應用程序只需要對應 Java 應用程序的一小部分配置代碼,一般是十分之一或更多。

◆低重復:不要重復自己(Don't Repeat Yourself,DRY)是 Rails 社區的一個常見術語。Rails框架委員會使用通常看起來像是 Ruby 語言的擴展的方法來把重復的任務抽象出來。正如您在本系列的 第三篇文章 中看到的,Rails 的元編程策略使每行代碼都執行更多的任務。

◆即時反饋:使用Rails,對于您所做的大多數工作都會給出即時反饋。編寫一行代碼并保存后,在加載下一個Web頁面時將激活您所做的更改。更新了您的數據庫以后,遷移可以向您即時顯示更改。

實踐基礎

Ruby on Rails底層的觀點全都建立在實際經驗的基礎上。Rails框架是從開發受歡迎的Basecamp項目管理應用程序時的實際使用經驗成長起來的。

專注于某個領域

反對其宣稱的過高生產率的爭論通常類似于這樣:如果獲得了一把好的錘子,就很難找到另外一把生產率達到兩倍的錘子,更不用說把生產率提高 5 到 10 倍了,因為錘子已經發展演變幾千年了。但是把Ruby on Rails與各種通用目的的Java框架相比較的人是不得要領的。

通過從根本上改變工具的本質可以在某些方面提高 10 倍的生產率。現在專業的制造者使用釘子槍能夠在用錘子釘入一顆釘子的時間內釘入很多釘子。像釘子槍一樣,Rails 也是有專門用途的。它是一個專門編寫來用于單個領域的框架:新的支持數據庫的Web應用程序。

我猜想現今構建的應用程序有一半是支持數據庫且基于 Web 的應用程序。所以 Rails 是明確針對某領域的產品,但是這個領域很大也很重要。專攻此領域使 Rails 具有巨大的優勢,引起巨大轟動。通過專注于此領域的項目,Rails 的設計者可以選擇一些其他框架不能或者不應該采用的捷徑。這種專門化往往為簡單性而失去靈活性。

基于Web的應用程序允許一組相似的優化。當您知道一個應用程序是基于Web的,您就能知道應用程序的大體結構和可能需要的主要組件。因為Rails關注的是基于Web的應用程序,所以在 Rails 中增強了以下功能:

◆模型-視圖-控制器:Rails的MVC框架(稱為 Action Pack)為基于 Web 的訪問進行了定制并且實現了著名的被稱為Model 2的設計策略。Rails版本已經優化了控制器和視圖之間的集成(該集成能夠使配置文件最小化)并且自動使控制器實例變量可供視圖使用。

◆項目目錄結構:所有 Rails 應用程序都具有相同的項目結構,其中的目錄用于存儲應用程序代碼、數據庫配置、公共的靜態文件,以及用于管理Web服務器和進行基于Web的功能測試的腳本。

◆架構:通過提供用于生成應用程序組件(這些組件都符合普通架構目標,比如頁面級和片段級緩存;兩層設計;用于測試、開發和生產的環境)的開箱即用腳本,Rails框架簡化了架構。

◆工具:Rails 工具專門用于 Web。日志支持、breakpointer、剖析器(profiler)和測試框架都針對基于Web的應用程序進行了修剪并針對兩層操作而被啟用。但是釘子槍永遠不會取代錘子,我們卻愚蠢地希望能完全取代。錘子總能做一些釘子槍不能做的事情。Rails將永遠不會成為用于企業集成、對象關系映射或全堆棧 Web 服務的工具。您可以對 Rails 所做的***期望是,它是能很好滿足它所針對領域的專門工具。

#p#

開發人員實踐

當您開始透過表面深入研究下去時,您開始了解 Rails 開發人員實踐是如此的完全不同。快速的反饋周期、每次的交互控制和約定優于配置,這些都增強了在 Java 框架中不常用的那些方面的開發人員實踐。

反饋周期

影響開發人員生產率的最重要因素之一是總體反饋周期。反饋周期是從改變代碼到在屏幕上看到執行應用程序的結果所用的時間。在Rails中,能夠在編碼時得到即時的反饋。當您對Ruby代碼做出更改時,該功能十分顯著。可以立即加載一個瀏覽器頁面來查看更改以后的結果。因為在開發期間不需要編譯或部署,我傾向于在重新加載瀏覽器或執行測試用例之前只對編程做微小的更改。幾乎每個開始使用Rails的Java開發人員都以較小的程序塊進行編碼。

您可能認為對開發人員實踐友好的快速反饋周期不支持生產環境。畢竟,頻繁地重新加載類能夠獲得快速反饋周期,但是會使生產應用程序變得很慢。但是Rails通過為部署和開發提供不同的環境,避免了這個問題。在開發環境中以應用程序的性能為代價強制頻繁地重新加載類,而生產環境則把類的重新加載減少到***限度,以開發人員的快速反饋周期為代價,為最終用戶提供快速的體驗。

交互性

Ruby的交互式體驗也有助于Rails。您可能認為在沒有完整的IDE的情況下調試Rails應用程序將是一個痛苦的過程。實際卻不是這樣。Rails提供兩種簡化調試的功能。其中之一是breakpointer,它允許您向源代碼添加breakpoint關鍵字。

為理解breakpointer的運行過程,可創建一個簡單的Rails應用程序,生成一個控制器,啟動服務器,并啟動breakpointer。確保您有權使用breakpointer窗口,因為當Ruby遇到斷點時您將使用它。使用Windows時,命令序列如下:

  1. >rails sample  
  2. >cd sample  
  3. >ruby script/generate controller samples  
  4. >start ruby script\server  
  5. >start ruby script\breakpointer 

如果在 UNIX® 或 Mac OS X 中運行,請確保服務器在一個單獨的進程中啟動。把以下代碼鍵入或粘貼到app/controllers/samples_controller.rb文件中:

  1. class SamplesController < ApplicationController 
  2.   def index  
  3.     breakpoint  
  4.     @session[:message] = "hi, mom"  
  5.     render_text "Showing index"  
  6.   end  
  7.  
  8.   def show  
  9.     render_text @session[:message]  
  10.   end  
  11. end 

通過加載頁面localhost:3000/samples和localhost:3000/samples/show來測試代碼。當Rails執行到斷點時,應用程序暫停。breakpointer窗口用具有控制器當前狀態的環境打開一個Ruby解釋器。然后可以執行Ruby命令來查詢會話的狀態、執行方法和查詢變量:

  1. > puts @session[:message]  
  2. -> hi, mom 

這種密切聯系并沒有給您一個完整的調試器,但是您確實能獲得 Java 調試器不能為您帶來的功能,包括訪問完整的解釋器和能夠執行應用程序的方法。

約定優于配置

約定優于配置也會使新的Rails開發人員能夠立即上手,因為控制器和模型代碼特別簡潔。回顧一下,具有很多屬性且與部門(department)具有一對多關系的Person對象可能類似于下面這樣:

  1. class Person < Active Record::Base  
  2. belongs_to :department  
  3. end 

不需要任何配置,因為Rails根據命名約定推斷表 (people) 的名稱、對象標識符和主鍵 (id) 的名稱、相關的表 (departments) 的名稱、外鍵 (department_id) 的名稱、外部類 (department.rb) 的名稱。無論對于編寫、閱讀還是維護來說,代碼都保持簡單、輕巧和非常賞心悅目。目的直接而清楚。

#p#

Java開發人員能學到什么?

這里我不推薦用Java語言構建一個更好的Rails。相反,Java開發人員應該從Rails框架學習一些教訓,并試圖構建或增強Java框架以完成下面的任務:

◆允許熱部署,這將縮短開發反饋周期或支持允許熱部署的框架。在Java端此優先權應該比現在高得多。

◆使用較少的XML和更多的約定。約定與配置并不是井水不犯河水,因為可以使用約定來指定明確的默認值,使用配置來覆蓋約定。像 Rails 那樣使用這種方法,您可以兩全其美:具有較少重復的簡潔代碼而不會失去靈活性。為了在調試過程中瀏覽Java類,合并更多的腳本語言,包括BeanShell。

◆為任務選用正確的工具。不必僅僅因為需要持久性就借助于Hibernate或僅僅因為需要Web應用程序就借助于Struts。通過合并其他編程語言的***特性,您可以不必重復Rails,但肯定可以改善Java體驗。

原文鏈接:http://www.ibm.com/developerworks/cn/java/j-cb05096.html

【編輯推薦】

  1. Ruby On Rails 3.0正式發布 更快更強更美麗
  2. Ruby on Rails性能優化七劍
  3. 專題:Ruby On Rails開發教程 
責任編輯:王曉東 來源: IBM DW
相關推薦

2009-12-16 17:07:27

Ruby on Rai

2009-08-27 10:21:22

Ruby on Rai

2009-08-06 09:13:36

Ruby on Rai

2009-09-29 17:04:29

2009-12-14 15:30:43

安裝Ruby on R

2015-10-14 17:27:18

性能

2009-12-17 14:29:50

Ruby on Rai

2015-10-10 11:00:05

RubyRails性能

2009-12-16 16:37:59

Ruby on Rai

2009-06-17 10:08:32

Ruby on Rai安裝Ruby

2009-07-20 09:12:54

Ruby on Rai

2009-12-16 15:41:10

Ruby on Rai

2009-12-16 17:37:31

Ruby on Rai

2009-12-17 17:37:42

Ruby on Rai

2009-12-16 15:23:33

Ruby on rai

2013-03-28 12:42:02

RubyRails

2010-07-12 09:22:05

RubyRuby on rai

2009-12-16 16:24:00

Ruby on Rai

2010-10-09 08:58:03

NginxRuby on Rai

2009-07-01 10:30:00

Ruby on Rai
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品中文字幕久久二区 | 国产91久久久久久久免费 | 伊人网一区 | 国产农村妇女精品一区 | 黄色大片免费网站 | 精品国产乱码久久久久久蜜柚 | 一起操网站 | 亚洲视频在线看 | 精品视频在线观看 | 九九热在线观看视频 | 国产精品入口久久 | 精品乱子伦一区二区三区 | 亚洲精品成人av久久 | 影音先锋欧美资源 | 伊人久久综合影院 | 亚洲精品久久久久国产 | 午夜专区 | 亚洲成人一区 | 日韩在线观看 | 日本色婷婷 | 国产精品久久久久久久7777 | 国产精品揄拍一区二区 | 日本aⅴ中文字幕 | 亚洲高清在线观看 | 国产精品一区二区在线免费观看 | 99re66在线观看精品热 | 中文字幕在线视频一区二区三区 | 黑人粗黑大躁护士 | 亚洲在线久久 | 亚洲国产精品99久久久久久久久 | 亚洲午夜精品在线观看 | 欧洲亚洲一区二区三区 | 欧美成人精品 | 亚洲成人在线网 | 中文字幕免费在线观看 | 91精品国产91久久综合桃花 | 黄色三级毛片 | 国产视频亚洲视频 | 亚洲精品久久久久久国产精华液 | 国产成人精品综合 | 中文字幕视频在线观看 |