今天的主題應該放在第一天(或是最後)
但畢竟我是邊寫邊研究
所以現在寫這個題目比一開始有把握
之所以不壓在後面而現在就寫
自然是因為今天想不到其他內容了!
這一篇文章的意義在於
如果未來出了一個新的框架
只要比較是否擁有下列重要元素
或者有更佳的替代方案即可(畢竟典範不斷轉移)
比依靠直覺或單方面說法判斷一個框架的優劣更加可靠
這邊是以全能型的框架為依據
所以輕量級(Sinatra、Flask、Slim...)框架自然不需要符合這些標準
這在前面Django與Rails的比較中就談了不少
儘管在Django稱之為MTV(Model-Template-View)
但資料、邏輯、視覺分開處理概念是相同的
毫無疑問的是現代框架的主幹
詳見RESTful API設計模式談現代網頁框架
遺憾的是Django並沒有預設採用RESTful的設計
必須引入外掛
至於router則是所有框架都有的設計(儘管Django稱為urls.py
)
雖然實作上略有不同
urls.py
(router)ORM (Object-relational mapping ) 在之前的Phoenix與Laravel的部分都有介紹過
這邊就不重複,有興趣的人可以看我之前的文章
除了少數硬派的人堅持自己寫SQL外
大部份框架都選擇接受ORM
這也是時代潮流的一部分
透過migration來實作資料庫結構異動
而不是直接寫sql語法去變更
好處是資料庫異動可以納入版本管理,壞處無
所有框架都採用且名稱也相同
不需多做解釋
雖然與專案並不是直接相關
但卻是專案開發上相當重要的工具
一個可以與專案資料與結構互動的指令介面
寫任何邏輯之前,幾乎都會先在這邊做小規模驗證
然後逐步疊加成為實作方法
很高興所有專案都有接納並實作這個功能
只是名稱各異
不同框架間的比較請見「project console (CLI)比較簡析」
雖然也可以用編輯器新增檔案
但被Rails寵壞以後,沒有這個功能還是覺得很老土啊
可以產生新的migration、model、controller、view、tester的指令
一樣是加速開發效率的工具
不管框架使用哪一種語言
幾乎都會有的需求,產生html等前端之前需要簡單的邏輯應用
例如rails的erb與Laravel的blade
實務上不可或缺的工具
在當代開發的情境中
測試沒完成等同於功能沒完成
雖然每次閒聊時問大家專案有沒有寫測試
幾乎都會得到一臉苦笑
雖然也有人說測試接近一種信仰
跟助人為善或早睡早起一樣,是一種道德
但至少框架預設有這個內容
就代表著這是一個善良與勸人為善的框架
不是嗎?
洋洋灑灑列了8點
幾乎都是當前業界公認的最佳實務
雖然並不是說全都符合就一定是神兵利器
但假如缺乏很多元素(除非是輕量級)
那你可能就需要考慮是否選對框架囉!
其實我覺得有時候沒必要全部兼具,有預設的會很方便,但是沒有其實也沒差。
真正必要的就是 MVC 和 router 以及 frontend mid-layer,其他都是加分題。
像 ORM,對於目前正盛行的 NoSQL 就沒辦法兼具,不是得自己從driver接就是要換成其他的backend,背後設計的邏輯大都和原本框架所有的 ORM 有點衝突。(畢竟源頭設計理念就不同)
RESTful 也是,有時候專案就不是那麼大,或是像我一樣一個全端處理一切,不需要開放api出來,真的需要的話自幹或是用套件都行。(其實我覺得自幹比學會用 Django REST framework 還快,只是每個專案都要的話那就得用套件)
最近甚至覺得乾脆改用flask這種從底層用套件疊堆起來的輕框架也不錯。
(題外話,我很建議初學者學flask,沒有多餘的東西,可以很專注在web架構的基礎下,但又不用去處理底層的東西,後面要學其他的加套件疊堆也行。)
不過還是老話一句,選你所愛,愛你所選,這是篇幫助很多人選擇框架的好文,加油。
我其實也是邊寫邊思考,就像你所說不同兵器應對不同情境,端看需求與個人喜好。希望文章能對新手參考有幫助囉 :)