以下簡單分享我在過去幾個星期,跳脫熟悉的Django框架來學習Ruby on Rails (以下都簡稱 ror )框架的簡短心得。若有錯誤,歡迎請在地下留言更正我的錯誤。
由於合作上的需要我開始接觸ror。 一直以來都是使用Django在網頁開發上,一路上接觸不少網頁開發工程師/新手網頁工程師都使用或學習ror作為網頁開發框架。對於ror 我的了解一直是:開發十分迅速、很多bug與它強大的社群資源。當然據說ruby語言也不好上手(跟Python比較的話就猶如中文文學史上的文言文—Ruby 與 白話文—Python 差不多吧 ?)。
框架差異
以上是我如何開始接觸ror與接觸前對於ror的看法。接著講講兩者框架的差異吧
動態網頁任務 | ROR(MVC) | Django(MTV) |
---|---|---|
資料庫互動存取 | Models, 在對應的app models 上建立class物件 | Models, 每個app中的models.py建立class 物件 |
網頁架構與模式 | View, app的對應文件夾中存放html.erb 檔案 | Template, 建立一個template 文件夾中統一存取 |
控制與整合 | Controller, 每個app有自己的controller來決定操作模型、取出資料 | View, 與ROR的controller相似,兩者都是定義一個函數的方式來回覆使用者的請求(request) |
細節上兩者架構的差異可以參考:https://bernardopires.com/2014/03/rails-vs-django-an-in-depth-technical-comparison/
對於沒有接觸過網頁框架的人來說,看以上的表格可能會奇怪為什麼會有app呢?
其實兩個框架都能將一個專案的各種功能分裝成一個一個app(以facebook為例就是news feed的頁面是一個app、使用者與使用者之間聊天的頁面是另一個app )來工作。一來讓網頁在未來變得容易擴張同時任何一個功能出現錯誤並不會拖累整個網頁平台的運作。
回到表格上我們可以看出其實兩者的架構幾乎一樣啊。
那麼從運行效率上兩者誰比較優越呢?使用上我個人沒有留意到效能的差異,但以前讀過的一篇研究顯示Django略勝ror一點點,但兩者與其他框架排名都是歸類在較慢的等級。雖然排名較後但是根據我以往Django的觀察,靜態網頁的以現在的記憶體和雲服務提供的CPU依然是能輕易勝任。
開發過程上的差異
如果今天你是任何一個框架的開發者,想要轉換框架環境在開發步驟上需要注意什麼呢?
Django -> ROR:
一般上在django建議一個新的專案時,django不會幫你建立一個完整的MTV架構出來( 我使用的版本不會)。Template, Models都要從新自己寫。每添加一個新的app都需要自己手動更新settings中的apps清單。使用ROR建立一個新的project時,很多基本的內容都幫你安裝好,我在使用時連sass的preprocessor 功能都已經預設好了。而且controller、models中含有很多被註解掉的範例可以參考。
我個人覺得學習上可以直接套用Django的觀念來學習整個ror框架的用法可以加快你學習的速度。因為兩者無論是進階模板使用( ror: yield, django : block/endblock ) 都十分相似。只要django有的功能在ror上一定不會少。
另外一個特點是ror 有強大的app涵蓋了各種前端框架(bootstrap、 skeleton…其他自己谷歌看看)與各種普遍使用的css library(compass, bourbon…) 或是連fontawesome也能以app方式安裝使用。
ROR -> Django:
有鑑於我一開始先接觸了django才到ror,因此這部分我就稍微講解,無法詳細申論。
從我的觀察與個人經驗上看,從ror轉django需要做好一直寫一直為設置更新的動作。Django稍微比ror好的是當開發者在創立專案時,django 框架會有現成的後端dashboard, 使用superuser帳戶登入(當然需要自己創建一個)就能直接清楚簡易的的更改數據庫中有任何的資料。
關於這個功能我相信ror應該有gem apps 可以做到相同的功能,但至少它不是預設的?
總結:
以上就是我碰了 ror 以後簡短的心得分享。如果你有什麼贊同或是想法歡迎在底下留言。