Rails基本原理是什么
這篇文章主要介紹“Rails基本原理是什么”,在日常操作中,相信很多人在Rails基本原理是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Rails基本原理是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
Rails基本原理
Ruby on Rails框架不是大家所想的典型的應(yīng)用程序開(kāi)發(fā)框架。Rails 的創(chuàng)始人 David Heinemeier Hansson 通常把該框架稱(chēng)為固執(zhí)己見(jiàn)的軟件,并且他喜歡打破長(zhǎng)期存在的約定。David 做出了非常有哲理性的決策并在整個(gè)框架中嚴(yán)格遵循這些決策。遍布于 Rails 內(nèi)的核心觀點(diǎn)有:
◆無(wú)縫集成:Rails 聰明地利用了 Ruby 語(yǔ)言的***特性。它擴(kuò)展了 Ruby,但您很難說(shuō)出 Ruby 在哪里結(jié)束,Rails 從哪里開(kāi)始。您也可以看到 Active Record(Rails 的持久引擎)和模型-視圖-控制器(MVC)框架之間進(jìn)行了很好的集成。例如,您可以編寫(xiě)三行代碼,創(chuàng)建一個(gè)表,然后立即為該模型生成用戶界面。
◆約定優(yōu)于配置:為保持良好的靈活性,Java 框架保持了大量普遍的配置文件。Rails 不采用這種策略。它為方法、類(lèi)、表和列采用普通的項(xiàng)目目錄結(jié)構(gòu)和簡(jiǎn)單普通的命名約定,以推斷哪些已配置在 Java 應(yīng)用程序中。結(jié)果是,Rails 應(yīng)用程序只需要對(duì)應(yīng) Java 應(yīng)用程序的一小部分配置代碼,一般是十分之一或更多。
◆低重復(fù):不要重復(fù)自己(Don't Repeat Yourself,DRY)是 Rails 社區(qū)的一個(gè)常見(jiàn)術(shù)語(yǔ)。Rails框架委員會(huì)使用通??雌饋?lái)像是 Ruby 語(yǔ)言的擴(kuò)展的方法來(lái)把重復(fù)的任務(wù)抽象出來(lái)。正如您在本系列的 第三篇文章 中看到的,Rails 的元編程策略使每行代碼都執(zhí)行更多的任務(wù)。
◆即時(shí)反饋:使用Rails,對(duì)于您所做的大多數(shù)工作都會(huì)給出即時(shí)反饋。編寫(xiě)一行代碼并保存后,在加載下一個(gè)Web頁(yè)面時(shí)將激活您所做的更改。更新了您的數(shù)據(jù)庫(kù)以后,遷移可以向您即時(shí)顯示更改。
實(shí)踐基礎(chǔ)
Ruby on Rails底層的觀點(diǎn)全都建立在實(shí)際經(jīng)驗(yàn)的基礎(chǔ)上。Rails框架是從開(kāi)發(fā)受歡迎的Basecamp項(xiàng)目管理應(yīng)用程序時(shí)的實(shí)際使用經(jīng)驗(yàn)成長(zhǎng)起來(lái)的。
專(zhuān)注于某個(gè)領(lǐng)域
反對(duì)其宣稱(chēng)的過(guò)高生產(chǎn)率的爭(zhēng)論通常類(lèi)似于這樣:如果獲得了一把好的錘子,就很難找到另外一把生產(chǎn)率達(dá)到兩倍的錘子,更不用說(shuō)把生產(chǎn)率提高 5 到 10 倍了,因?yàn)殄N子已經(jīng)發(fā)展演變幾千年了。但是把Ruby on Rails與各種通用目的的Java框架相比較的人是不得要領(lǐng)的。
通過(guò)從根本上改變工具的本質(zhì)可以在某些方面提高 10 倍的生產(chǎn)率?,F(xiàn)在專(zhuān)業(yè)的制造者使用釘子槍能夠在用錘子釘入一顆釘子的時(shí)間內(nèi)釘入很多釘子。像釘子槍一樣,Rails 也是有專(zhuān)門(mén)用途的。它是一個(gè)專(zhuān)門(mén)編寫(xiě)來(lái)用于單個(gè)領(lǐng)域的框架:新的支持?jǐn)?shù)據(jù)庫(kù)的Web應(yīng)用程序。
我猜想現(xiàn)今構(gòu)建的應(yīng)用程序有一半是支持?jǐn)?shù)據(jù)庫(kù)且基于 Web 的應(yīng)用程序。所以 Rails 是明確針對(duì)某領(lǐng)域的產(chǎn)品,但是這個(gè)領(lǐng)域很大也很重要。專(zhuān)攻此領(lǐng)域使 Rails 具有巨大的優(yōu)勢(shì),引起巨大轟動(dòng)。通過(guò)專(zhuān)注于此領(lǐng)域的項(xiàng)目,Rails 的設(shè)計(jì)者可以選擇一些其他框架不能或者不應(yīng)該采用的捷徑。這種專(zhuān)門(mén)化往往為簡(jiǎn)單性而失去靈活性。
基于Web的應(yīng)用程序允許一組相似的優(yōu)化。當(dāng)您知道一個(gè)應(yīng)用程序是基于Web的,您就能知道應(yīng)用程序的大體結(jié)構(gòu)和可能需要的主要組件。因?yàn)镽ails關(guān)注的是基于Web的應(yīng)用程序,所以在 Rails 中增強(qiáng)了以下功能:
◆模型-視圖-控制器:Rails的MVC框架(稱(chēng)為 Action Pack)為基于 Web 的訪問(wèn)進(jìn)行了定制并且實(shí)現(xiàn)了著名的被稱(chēng)為Model 2的設(shè)計(jì)策略。Rails版本已經(jīng)優(yōu)化了控制器和視圖之間的集成(該集成能夠使配置文件最小化)并且自動(dòng)使控制器實(shí)例變量可供視圖使用。
◆項(xiàng)目目錄結(jié)構(gòu):所有 Rails 應(yīng)用程序都具有相同的項(xiàng)目結(jié)構(gòu),其中的目錄用于存儲(chǔ)應(yīng)用程序代碼、數(shù)據(jù)庫(kù)配置、公共的靜態(tài)文件,以及用于管理Web服務(wù)器和進(jìn)行基于Web的功能測(cè)試的腳本。
◆架構(gòu):通過(guò)提供用于生成應(yīng)用程序組件(這些組件都符合普通架構(gòu)目標(biāo),比如頁(yè)面級(jí)和片段級(jí)緩存;兩層設(shè)計(jì);用于測(cè)試、開(kāi)發(fā)和生產(chǎn)的環(huán)境)的開(kāi)箱即用腳本,Rails框架簡(jiǎn)化了架構(gòu)。
◆工具:Rails 工具專(zhuān)門(mén)用于 Web。日志支持、breakpointer、剖析器(profiler)和測(cè)試框架都針對(duì)基于Web的應(yīng)用程序進(jìn)行了修剪并針對(duì)兩層操作而被啟用。但是釘子槍永遠(yuǎn)不會(huì)取代錘子,我們卻愚蠢地希望能完全取代。錘子總能做一些釘子槍不能做的事情。Rails將永遠(yuǎn)不會(huì)成為用于企業(yè)集成、對(duì)象關(guān)系映射或全堆棧 Web 服務(wù)的工具。您可以對(duì) Rails 所做的***期望是,它是能很好滿足它所針對(duì)領(lǐng)域的專(zhuān)門(mén)工具。
開(kāi)發(fā)人員實(shí)踐
當(dāng)您開(kāi)始透過(guò)表面深入研究下去時(shí),您開(kāi)始了解 Rails 開(kāi)發(fā)人員實(shí)踐是如此的完全不同。快速的反饋周期、每次的交互控制和約定優(yōu)于配置,這些都增強(qiáng)了在 Java 框架中不常用的那些方面的開(kāi)發(fā)人員實(shí)踐。
反饋周期
影響開(kāi)發(fā)人員生產(chǎn)率的最重要因素之一是總體反饋周期。反饋周期是從改變代碼到在屏幕上看到執(zhí)行應(yīng)用程序的結(jié)果所用的時(shí)間。在Rails中,能夠在編碼時(shí)得到即時(shí)的反饋。當(dāng)您對(duì)Ruby代碼做出更改時(shí),該功能十分顯著??梢粤⒓醇虞d一個(gè)瀏覽器頁(yè)面來(lái)查看更改以后的結(jié)果。因?yàn)樵陂_(kāi)發(fā)期間不需要編譯或部署,我傾向于在重新加載瀏覽器或執(zhí)行測(cè)試用例之前只對(duì)編程做微小的更改。幾乎每個(gè)開(kāi)始使用Rails的Java開(kāi)發(fā)人員都以較小的程序塊進(jìn)行編碼。
您可能認(rèn)為對(duì)開(kāi)發(fā)人員實(shí)踐友好的快速反饋周期不支持生產(chǎn)環(huán)境。畢竟,頻繁地重新加載類(lèi)能夠獲得快速反饋周期,但是會(huì)使生產(chǎn)應(yīng)用程序變得很慢。但是Rails通過(guò)為部署和開(kāi)發(fā)提供不同的環(huán)境,避免了這個(gè)問(wèn)題。在開(kāi)發(fā)環(huán)境中以應(yīng)用程序的性能為代價(jià)強(qiáng)制頻繁地重新加載類(lèi),而生產(chǎn)環(huán)境則把類(lèi)的重新加載減少到***限度,以開(kāi)發(fā)人員的快速反饋周期為代價(jià),為最終用戶提供快速的體驗(yàn)。
交互性
Ruby的交互式體驗(yàn)也有助于Rails。您可能認(rèn)為在沒(méi)有完整的IDE的情況下調(diào)試Rails應(yīng)用程序?qū)⑹且粋€(gè)痛苦的過(guò)程。實(shí)際卻不是這樣。Rails提供兩種簡(jiǎn)化調(diào)試的功能。其中之一是breakpointer,它允許您向源代碼添加breakpoint關(guān)鍵字。
為理解breakpointer的運(yùn)行過(guò)程,可創(chuàng)建一個(gè)簡(jiǎn)單的Rails應(yīng)用程序,生成一個(gè)控制器,啟動(dòng)服務(wù)器,并啟動(dòng)breakpointer。確保您有權(quán)使用breakpointer窗口,因?yàn)楫?dāng)Ruby遇到斷點(diǎn)時(shí)您將使用它。使用Windows時(shí),命令序列如下:
>railssample>cdsample>rubyscript/generatecontrollersamples>startrubyscript\server>startrubyscript\breakpointer
如果在 UNIX® 或 Mac OS X 中運(yùn)行,請(qǐng)確保服務(wù)器在一個(gè)單獨(dú)的進(jìn)程中啟動(dòng)。把以下代碼鍵入或粘貼到app/controllers/samples_controller.rb文件中:
classSamplesController<ApplicationControllerdefindexbreakpoint@session[:message]="hi,mom"render_text"Showingindex"enddefshowrender_text@session[:message]endend
通過(guò)加載頁(yè)面localhost:3000/samples和localhost:3000/samples/show來(lái)測(cè)試代碼。當(dāng)Rails執(zhí)行到斷點(diǎn)時(shí),應(yīng)用程序暫停。breakpointer窗口用具有控制器當(dāng)前狀態(tài)的環(huán)境打開(kāi)一個(gè)Ruby解釋器。然后可以執(zhí)行Ruby命令來(lái)查詢(xún)會(huì)話的狀態(tài)、執(zhí)行方法和查詢(xún)變量:
>puts@session[:message]->hi,mom
這種密切聯(lián)系并沒(méi)有給您一個(gè)完整的調(diào)試器,但是您確實(shí)能獲得 Java 調(diào)試器不能為您帶來(lái)的功能,包括訪問(wèn)完整的解釋器和能夠執(zhí)行應(yīng)用程序的方法。
約定優(yōu)于配置
約定優(yōu)于配置也會(huì)使新的Rails開(kāi)發(fā)人員能夠立即上手,因?yàn)榭刂破骱湍P痛a特別簡(jiǎn)潔?;仡櫼幌?,具有很多屬性且與部門(mén)(department)具有一對(duì)多關(guān)系的Person對(duì)象可能類(lèi)似于下面這樣:
classPerson<ActiveRecord::Basebelongs_to:departmentend
不需要任何配置,因?yàn)镽ails根據(jù)命名約定推斷表 (people) 的名稱(chēng)、對(duì)象標(biāo)識(shí)符和主鍵 (id) 的名稱(chēng)、相關(guān)的表 (departments) 的名稱(chēng)、外鍵 (department_id) 的名稱(chēng)、外部類(lèi) (department.rb) 的名稱(chēng)。無(wú)論對(duì)于編寫(xiě)、閱讀還是維護(hù)來(lái)說(shuō),代碼都保持簡(jiǎn)單、輕巧和非常賞心悅目。目的直接而清楚。
Java開(kāi)發(fā)人員能學(xué)到什么?
這里我不推薦用Java語(yǔ)言構(gòu)建一個(gè)更好的Rails。相反,Java開(kāi)發(fā)人員應(yīng)該從Rails框架學(xué)習(xí)一些教訓(xùn),并試圖構(gòu)建或增強(qiáng)Java框架以完成下面的任務(wù):
◆允許熱部署,這將縮短開(kāi)發(fā)反饋周期或支持允許熱部署的框架。在Java端此優(yōu)先權(quán)應(yīng)該比現(xiàn)在高得多。
◆使用較少的XML和更多的約定。約定與配置并不是井水不犯河水,因?yàn)榭梢允褂眉s定來(lái)指定明確的默認(rèn)值,使用配置來(lái)覆蓋約定。像 Rails 那樣使用這種方法,您可以?xún)扇涿溃壕哂休^少重復(fù)的簡(jiǎn)潔代碼而不會(huì)失去靈活性。為了在調(diào)試過(guò)程中瀏覽Java類(lèi),合并更多的腳本語(yǔ)言,包括BeanShell。
◆為任務(wù)選用正確的工具。不必僅僅因?yàn)樾枰志眯跃徒柚贖ibernate或僅僅因?yàn)樾枰猈eb應(yīng)用程序就借助于Struts。通過(guò)合并其他編程語(yǔ)言的***特性,您可以不必重復(fù)Rails,但肯定可以改善Java體驗(yàn)。
總結(jié)
以上是生活随笔為你收集整理的Rails基本原理是什么的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vue的开发工具都有哪些呢
- 下一篇: 手机导航哪个好用