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 倍的生產率?,F在專業的制造者使用釘子槍能夠在用錘子釘入一顆釘子的時間內釘入很多釘子。像釘子槍一樣,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 所做的***期望是,它是能很好滿足它所針對領域的專門工具。
開發人員實踐
當您開始透過表面深入研究下去時,您開始了解 Rails 開發人員實踐是如此的完全不同??焖俚姆答佒芷?、每次的交互控制和約定優于配置,這些都增強了在 Java 框架中不常用的那些方面的開發人員實踐。
反饋周期
影響開發人員生產率的最重要因素之一是總體反饋周期。反饋周期是從改變代碼到在屏幕上看到執行應用程序的結果所用的時間。在Rails中,能夠在編碼時得到即時的反饋。當您對Ruby代碼做出更改時,該功能十分顯著??梢粤⒓醇虞d一個瀏覽器頁面來查看更改以后的結果。因為在開發期間不需要編譯或部署,我傾向于在重新加載瀏覽器或執行測試用例之前只對編程做微小的更改。幾乎每個開始使用Rails的Java開發人員都以較小的程序塊進行編碼。
您可能認為對開發人員實踐友好的快速反饋周期不支持生產環境。畢竟,頻繁地重新加載類能夠獲得快速反饋周期,但是會使生產應用程序變得很慢。但是Rails通過為部署和開發提供不同的環境,避免了這個問題。在開發環境中以應用程序的性能為代價強制頻繁地重新加載類,而生產環境則把類的重新加載減少到***限度,以開發人員的快速反饋周期為代價,為最終用戶提供快速的體驗。
交互性
Ruby的交互式體驗也有助于Rails。您可能認為在沒有完整的IDE的情況下調試Rails應用程序將是一個痛苦的過程。實際卻不是這樣。Rails提供兩種簡化調試的功能。其中之一是breakpointer,它允許您向源代碼添加breakpoint關鍵字。
為理解breakpointer的運行過程,可創建一個簡單的Rails應用程序,生成一個控制器,啟動服務器,并啟動breakpointer。確保您有權使用breakpointer窗口,因為當Ruby遇到斷點時您將使用它。使用Windows時,命令序列如下:
>railssample>cdsample>rubyscript/generatecontrollersamples>startrubyscript\server>startrubyscript\breakpointer
如果在 UNIX® 或 Mac OS X 中運行,請確保服務器在一個單獨的進程中啟動。把以下代碼鍵入或粘貼到app/controllers/samples_controller.rb文件中:
classSamplesController<ApplicationControllerdefindexbreakpoint@session[:message]="hi,mom"render_text"Showingindex"enddefshowrender_text@session[:message]endend
通過加載頁面localhost:3000/samples和localhost:3000/samples/show來測試代碼。當Rails執行到斷點時,應用程序暫停。breakpointer窗口用具有控制器當前狀態的環境打開一個Ruby解釋器。然后可以執行Ruby命令來查詢會話的狀態、執行方法和查詢變量:
>puts@session[:message]->hi,mom
這種密切聯系并沒有給您一個完整的調試器,但是您確實能獲得 Java 調試器不能為您帶來的功能,包括訪問完整的解釋器和能夠執行應用程序的方法。
約定優于配置
約定優于配置也會使新的Rails開發人員能夠立即上手,因為控制器和模型代碼特別簡潔?;仡櫼幌?具有很多屬性且與部門(department)具有一對多關系的Person對象可能類似于下面這樣:
classPerson<ActiveRecord::Basebelongs_to:departmentend
不需要任何配置,因為Rails根據命名約定推斷表 (people) 的名稱、對象標識符和主鍵 (id) 的名稱、相關的表 (departments) 的名稱、外鍵 (department_id) 的名稱、外部類 (department.rb) 的名稱。無論對于編寫、閱讀還是維護來說,代碼都保持簡單、輕巧和非常賞心悅目。目的直接而清楚。
Java開發人員能學到什么?
這里我不推薦用Java語言構建一個更好的Rails。相反,Java開發人員應該從Rails框架學習一些教訓,并試圖構建或增強Java框架以完成下面的任務:
◆允許熱部署,這將縮短開發反饋周期或支持允許熱部署的框架。在Java端此優先權應該比現在高得多。
◆使用較少的XML和更多的約定。約定與配置并不是井水不犯河水,因為可以使用約定來指定明確的默認值,使用配置來覆蓋約定。像 Rails 那樣使用這種方法,您可以兩全其美:具有較少重復的簡潔代碼而不會失去靈活性。為了在調試過程中瀏覽Java類,合并更多的腳本語言,包括BeanShell。
◆為任務選用正確的工具。不必僅僅因為需要持久性就借助于Hibernate或僅僅因為需要Web應用程序就借助于Struts。通過合并其他編程語言的***特性,您可以不必重復Rails,但肯定可以改善Java體驗。
到此,關于“Rails基本原理是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
利率是指一定時期內利息額與借貸資金額(本金)的比率。利率是決定企業資金成本高低的主要因素,同時也是企業籌資、投資的決定性因素,對金融環境的研究必須注意利率現狀及其變動趨勢。那么有效年利率怎么理解?實際利率和有效利率一樣嗎?有效年利率(Effective Annual Percentage Rate)指在按照給定的計息期利率和每年復利次數計算利息時,能夠產生相同結果的每年復利一次的年利率。在按照給定...
近日,有網友在網上提問政治:漢口路小學即將被夏鼓樓教育局劃入蕭郎集團,是真的嗎?北楊營學區有變化嗎?鼓樓區網發言人回復:目前沒有這個計劃!在這方面,瑯琊路小學教育集團對分校的支持和重視是做得最好的?,樼鹇沸W,創建于1934年,是父母傳世的四大名校之一。2015年,郎路小學錄取率為5.68%,錄取21人;2016年為8.66%,錄取人數為29人;2017年為4.93,錄取人數20人。直屬分校芳草園...
現在已經很少有人使用語音信箱了,但是語音信箱其實也是有很大的幫助的,尤其是當我們無法接聽電話的時候,那么,語音信箱怎么設置?開啟語音信箱收費嗎?語音信箱怎么開通使用?一起來看看吧!語音信箱怎么設置?1、首先我們要去營業廳去開通語音信箱功能;2、在手機上設置呼叫轉移,并將呼叫轉移的號碼設為語音信箱號碼。呼叫轉移的設置方法請參見本頻道“呼叫轉移”的介紹。注1:您可以根據需要選擇...