探討後端選型中不同語言及對應的Web框架

小y發表於2017-07-12

在進行後端選型的時候,實際上我們要選擇的是一個框架。後端領域所使用的技術和框架已經趨於穩定,我們只需要按我們的需要選擇所需要的框架。當存在多個框架適合時,我們再選擇適合的語言。不得不指出的是,當我們喜愛一個語言的時候,我們可能會偏愛於在這門語言裡尋找可用的方案。這自然是有好有壞,好的一點是:我們可以成為這門語言的專家,不好的一點是:我們可能選擇的不是最合適的方案。

讓我們先來探索一下可用的語言,以及它們對應的 Web 框架(以下內容均為個人觀點):

JavaScript

按照當前的流行趨勢來看,JavaScript是一門價效比非常高的語言。因為只要是 Web 就會有前端,只要有前端就需要有 javascript。與此同時 Node.js 在後臺中的地位已經愈發重要了。對於一般的專案而言,我們可以使用它來完成前端和後臺,除此還有移動應用。

在那些可以使用瀏覽器來執行的裝置上,我們都可以使用 JavaScript 來開發使用,如

  • 使用Node.js作為後臺語言,Express、Koa等作為後臺MVC框架,再選擇一個前端框架來實現前臺。
  • 使用基於瀏覽器核心的桌面應用Electron,加上Node.js生態系統裡的模組來實現桌面應用。
  • 使用混合應用移動框架Cordova,混合應用框架Ionic來實現跨平臺的移動應用。
  • 除此,還可以使用 Tessel 和 Ruff 等硬體來開發移動應用。

人們使用 WebView 和 JavaScript 來開發應用的很大一部分原因是,成本比較低。除了可以高效的開發 UI,還能支援跨平臺執行——即只需要編寫一次程式碼就可以在不同的作業系統 上執行。並且當應用對於效能要求不高時,只要適當地優化,它就可以表現得相當不錯。

在這門語言裡,有兩個後臺 MVC 框架比較流行:

  • Express,是在Node.js上最早的 MVC 框架,它由 Ruby 上的輕量級框架 Sinatra 啟發而來的。其框架本身封裝了大量實用的功能,核心特性是使用中介軟體來處理 HTTP 請求。
  • Koa,是由 Express 的核心開發者基於 ES6 新特性打造的新框架。與Express相比去除了一些框架自帶的功能,更加輕量級,可以讓開發者有更多的選擇——當然,這也意味著你需要自己去搭建這些環境。

簡單的對比一個兩者,Express發展得比較早,其生態系統比較豐富——很容易找到所需要的外掛。Koa 則基於 ES6 語言帶來一些新的特性,實時解決舊語言的一些問題,如回撥等等。

Python

Python 誕生得比較早,其語言特性——做事情只有一件方法,也決定了這門語言很簡單。與 JavaScript 相比,它仍是一門價效比非常高的語言——除了它不能在前端執行,帶來了一點劣勢。

python 是一門簡潔的語言,而且有大量的數學、科學工具、人工智慧的庫,這意味著在不遠的將來它會發揮更大的作用。同時在 Web 開發領域,他也有廣泛的應用,除了正常的 Web 開發,他還在網路爬蟲中飽受歡迎。

同樣的,在 Python 語言裡,也有兩個不錯的框架可以選擇,其中的 Django 是重量級框架,Flask 則是輕量級框架。

  • Django,最早是被應用於內容管理系統而開發的,其框架裡自帶了相當多的元件:ORM、表單序列化及驗證系統、後臺系統、快取框架、中介軟體支援等等。在其官網上宣稱是:The Web framework for perfectionists with deadlines,它即可以滿足完美主義者,又可以在截止期限前交付軟體。
  • Flask,則是一個輕量級的框架,它只有簡單的核心部分。換句話來說,你可以按自己的需要新增ORM、使用者認證、檔案上傳等等的功能。在今天來看,它的生態系統也相當的豐富,可以完成絕大部分的功能。

選擇 Flask 而不是選擇 Django 的原因是:Django本身規定好了一系列的規範和習慣。因而在程式設計時,我們只需要按步驟一步步往下走即可。

本書裡採用 Django 作為 Web 開發框架的主要原因是,它適合作為 CMS 框架,並且提供了豐富的元件功能,如我們所需要的使用者許可權管理、自帶後臺管理系統、ORM等等。

Java

Java 在今天看來仍然相當的受企業歡迎,除了在企業級 Web 系統開發上,它還在 Android 應用的開發上綻放光彩。

在學校的時候,一點兒也不喜歡 Java。後來才發現,我從 Java 上學到的東西比其他語言上學得還多。如果 Oracle 不毀壞 Java,那麼他會繼續存活很久。我可以用 JavaScript 造出各種我想要的東西,但是通常我無法保證他們是優雅的實現。過去人們在 Java 上花費了很多的時間,或在架構上,或在語言上,或在模式上。由於這些投入,都給了人們很多的啟發。這些都可以用於新的語言,新的設計,畢竟沒有什麼技術是獨立於舊的技術產生出來的。

由於在 Java 語言裡,我主要接觸的是 spring 框架,因此讓我們來討論一下 Spring:

  • Spring MVC,是由 Spring 框架提供的構建 Web 應用程式的全功能 MVC 模組。由於框架本身高度可配置,即可以直接使用編寫 XML 而不是 Java 來實現功能。它是一個典型的 MVC 框架,並且也是一個純正的servlet系統。
  • Spring Boot,其作用在於建立和啟動新的基於 Spring 框架的專案。系統本身做好了對不同框架的配置與整合,我們只需要對其配置,並編寫少量的程式碼即可。

如果你正在考慮使用 Spring 框架,那麼請使用 Spring Boot。

PHP

PHP是一門很容易上手的語言,由於其容易上手,並且發展得比較成熟。有相多當的個人網站使用它作為開發語言,除此還有諸如 Facebook 這樣大流量的網站也在使用它。除此不得不提及的是 WordPress 已經佔領了 CMS 市場超過一半的份額,並且它也佔領了全球網站的四分之一。WordPress原生是為部落格系統而建立的開源框架,由於部落格系統和內容管理系統在功能上很多是相似的,也因此它成為了最具知名度的內容管理系統(CMS,content management system)。

在這裡我們並不基於 WordPress 來開發我們的內容管理系統,因為它已經是一個相當成熟的框架了。如果你需要一個部落格系統或者內容管理系統,首先先寫 WordPress,然後再自己編寫一下吧。

php在框架方面有比較多的選擇,遺憾的是筆者只對Laravel比較瞭解。它是在PHP 5.3之後開發的新框架,其類似於Ruby on Rails——為PHP程式設計師提供快速開發的機制——提供快速開發的工具集,如生成程式碼、資料遷移、ORM等等。

Ruby

Ruby是一門優美而巧妙的語言,它可以使編寫出來的程式碼看上去更自然、簡潔,更具有表達力,因此而受程式設計師歡迎。早期 Ruby 語言的應用場景特別少,直至Ruby On Rails的出現。它是嚴格按照MVC結構開發的Web開源框架,其致力於提升程式設計師的快樂感和生產效率——快速建立頁面、模板和查詢功能等等。不過在今天由於可維性和效能的問題,它正在逐漸被替換。只是對於初創公司來說,它的開發效率仍使得它是一個不錯的選擇,隨後在業務穩定後使用其他框架來替換。

同樣的,由於 Ruby On Rails是一個重量級的選擇,Ruby程式設計師也推出了自己的輕量級框架 Sinatra。它是一個基於Ruby語言的DSL( 領域專屬語言),由於其程式碼行數少,簡單簡潔,可以很容易深入理解框架並對其做出定製。

其他

除了上面我們提到的語言,還有一些語言也很不錯,如GoScala等等。限於作者能力有限以及篇幅的原因就不展開詳細的討論。

節選自:《全棧應用開發:精益實踐》

亞馬遜:https://www.amazon.cn/dp/B0722YJR89 
京東:http://item.jd.com/12195442.html 
噹噹:http://product.dangdang.com/25077858.html

相關文章