iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 2
4
Modern Web

跨平台開發利器- ASP.NET Core 系列 第 2

(Day 2) 一切都是從開源搞出來的玩意兒 - 下篇

2.0 肥者再臨、不斷再臨的肥者

  微軟產品的另一個為人詬病的地方,即在於軟體產品通常很肥胖,效能很糟糕。在Windows 95/98和ME這幾個Windows後續版本就可以看到這個現象。
  但,由於Windwos 3.1太成功而賺飽錢的微軟,在一連串新版Windows的產品失敗後,雖然元氣大傷,但還是有餘力推出Windows NT 3.51及隨後的NT 4.0。Windows NT其實是一個由OS/2為藍本的來開發的作業系統,這裏有一些暗歷史可談談,其實OS/2是微軟和IBM共有的作業系統,只是微軟最後以自行開發的Windows 3.0面向市場,而IBM則直接以OS/2來面向市場,最後誰輸誰贏,歷史給了明確的答案。微軟在與IBM合作破局後,還是一直在OS/2下做新版本的研發,這就是Windows NT系列的根本。
  Windows NT系列,一直在微軟的視窗作業系統產品線上發展著,在Windows 3.1推出時,本來也有WIndows NT 3.1這個產品,只是沒有大張旗鼓在銷售。在Windwos 95、98、ME一連串的失敗之後,微軟把Windows NT 3.51推向市場,並隨後推出NT 4.0。
  NT系列是分為工作站及伺服器版本在銷售的,而"惡名照彰"的IIS(Internet Information Service),也是由NT 4.0伺服器版本開始面向市場。隨著IIS開始伴隨NT 4.0 伺服器版本流通,微軟的網際網路大業終於有了個基礎可以開花結果,因為IIS有著一套新的網頁伺服器腳本語言ASP(Active Server Page)做為網站開發的基礎,這真是連名字也要和JSP互別苗頭。
  到這個階段,網頁開發技術還是集中在後端,不論JSP或ASP,都是以伺服器端為主的網頁應用環境。但,由ASP的發展史,可以看出微軟其實對ASP是抱著試看看再說的策略,前面我們講到微軟對網際網路發展的失策,IIS/ASP雖然是微軟進軍網際網路Web伺服器端的產品,但微軟一直沒有給它一個正式產品的版本編號及產品行銷策略,直到Windwos 2000推出的時候,IIS 3.0版才把ASP冠上ASP 1.0的版號。而且在Windows 2000以前,連IIS也不是正式附隨在NT作業系統下的組件,一直到IIS 5.0版才是隨著Windows 2000的正式組件推出,之前IIS 1.0到4.0都是以Option Pack或Service Pack的補充組件發行。
  當ASP隨著IIS而逐漸為市場接受,使用ASP來開發網站的網頁開發人員變多起起來,微軟開始推出Visual Studio 97這套軟體開發工具。
 早期開發ASP網站,是用簡單的文字編輯器,像是筆記本來編寫,然後放到IIS的虛擬資料夾下執行網站來測試效果。也有些開發者會用一套名為Microsoft Frontpage的工具來開發ASP網頁,但是Forntpage真的是很爛的一套網頁開發工具,初學者還覺得好用,但是用久了,想進階時會發現Frontpage不但無助於開發,反而是網頁開發的絆腳石,因為會把寫好的ASP程式碼段搞成亂碼,所以大多數資深的ASP網頁開發人員,多半還是使用基本的文字編輯器來編程,而這也間接促成比Windows的筆記本功能更強的文字編輯軟體的出現。
  Visual Studio 97是一套相當肥胖的開發工具,一方面,它包括了Java、C++、Basic、InterDev(用來開發ASP網頁的工具),還有一套Visual Foxpro,整套都裝起來至少吃掉15GB的硬碟空間,相較之下,開發JSP或PHP只要一套只佔幾十MB的文件編輯器就搞定的情形,Visual Studio 97被第三方陣營猛烈攻擊是不在話下。
  當然,你可以選擇要安裝的語言,但龐大的整合式開發環境,真的基本安裝就至少5到10GB的空間使用。而動輒十來萬台幣的授權費,更是開源者的話題之一。
  微軟還弄了個MSDN Library訂閱,訂閱中除了Visual Studio開發工具,還有一大堆微軟各種產品的Knowledge Base,提供開發者更完整的技術服務。而MSDN訂閱費用也是相當高昂。此外,早期MSDN訂閱就是拿到一大堆的光碟片,一年下來,累積數百張的光碟片,也是需要空間來保存與管理,網際網路和Google的興起,真是資訊工作者的福音,可以擺脫那一大拖拉庫的光碟庫。
  在微軟還著重在WIndows平台的開發工具時,曾經推出一套名為MFC(Microsoft Foundaion Class Library)的程式庫,讓Windows應用軟體開發人員,可以透過呼叫MFC程式庫來控制視窗。MFC是一套用Microsoft C/C++ 7.0語言叫用的CLass Framework,一開始是隨附在Visual Studio裏一起銷售,貴森森的Visual Studio,讓MFC幾乎成了貴族才能使用的程序庫,這裏有個問題是微軟為什麼不讓開發者叫用Windows API就行了,為何要另外弄一套Framework - MFC?這問題的答案也很簡單,表面上是讓開發者更容易進行視窗應用軟體開發,骨子裏,我個人認為是商業機密的考量而己,微軟不想讓視窗作業系統太開放了。
  隨著時間的推演,MFC漸漸出現三個大問題:
1. 只有C++語言能夠叫用,但當時,Visual Basic的語言使用者數量明顯高過Visual C++的使用者
2. 微軟在推動C#語言成為主要程式語言,C#是微軟自己研究開發的程式語言,其目的是在想大一統程式語言環境。
3. 網際網路的興起,有很多應用是MFC無法支援的。

  C#語言帶進一個新觀念,CLR(Common Language Runtime),CLR是一個中間語言的執行環境,意思是,不論你用C++, C#, Basic語言開發,只要能編譯成CLR可執行的中間碼,就能順利執行,而C#是第一個支援CLR的程式語言。唉呀!這下糟了,MFC怎麼辦?好不容易養出一大票的MFC追隨者,不就一下子只能琵琶別抱, 轉投敵方陣營?於是,微軟又宣佈了.NET Framework這個龐大的程式庫(Library),向MFC追隨者畫出一個流著奶與蜜的美好天堂。於是.NET Framework就如同救世主般降臨微軟大地。
  好玩的是,微軟當初推銷.NET Framework的基本行銷術語是...跨平台的利器,其實這個利器指的是CLR,能夠跨不同程式語言。並不是指跨作業系統平台。雖然當初微軟的雄心壯志是打算把.NET Framework打造成能跨不同作業系統的網站平台,可是.NET Framework承襲了MFC的肥胖,再怎麼減肥也還是達不到能跨平台的輕盈。
  但是在視窗作業系統及IIS的獨門生意的照顧下,.NET Frameworky還是取得了一定的市場佔有。隨著.NET Framework的推行,微軟在2002年推出Visual Studio .NET,明顯衝著支持.NET Framework的開發環境,而Visual Studio .NET的另一個明顯改變是以往的InterDev變身成為ASP.NET。ASP.NET的出現,讓ASP網頁開發者面臨兩難,是繼續投靠微軟陣營呢?還是倒戈投靠PHP陣營。因為PHP己經是成熟網頁開發程式語言,而ASP.NET則是以初生之犢不畏虎的態勢,挾視窗作業系統及IIS的強力背景支持,卻也爭取到不少ASP網頁開發者的全力支持,而ASP.NET的語法結構和ASP相當類似,也減輕ASP開發者轉型的陣痛期。
  ASP.NET語法和ASP最主要的差別在原來混合在ASP語法裏的JavaScript或VBScript的腳本語言部份,到了ASP.NET時,變成Code Behind的方式存在,雖然ASP.NET存在Code Behid及Code inline兩種模式,但微軟宣稱Code Behind的方式可以讓網頁部份的控制程式單純化,不致於全放在一起,我泥中有你,你泥中有我,對網頁維護修改能起到一定程度的簡化作用。這樣說,雖然有道理,但原來簡單的JavaScript腳本部份, 卻變成複雜的Code Behide控制,就算是用Code Inline模式,也是有一定複雜程度的編程工作要進行,等於還要學習另一套完整的語言結構,端看是用C#或Visual Basic語言。有些ASP網頁開發人員,卡在新的C#或VB語言複雜度的關卡上,最後還是轉投PHP陣營,因為PHP相對來說,對習慣ASP為開發環境的網頁開發者來說,更為親和。

2.1 真的是Happy Endding嗎?

  這段歷史裏,開源者迎戰微軟.NET Framework怪獸,推出開源的Mono及DotGNU等輕量型的相容.NET Framework,讓ASP.NET能移殖到Linux作業環境下,真正實現.NET Framework跨不同作業系統平台的理想,可惜,歷史再一次的展現了不同的發展方向,網頁開發技術轉向發展分成三個主流:
1. 各種開源Framework, 像是Laravel、Code Igniter 、CakePHP、Phalcon等等的發展,讓PHP漸漸成為網頁開發的主要語言。
2. MVC、RestFUL等站開發技術理論的興起。
3. Ruby on Rails, Python, Go Lang等程式語言的公開發展。

  至於Mono、DotGNU,反而是ASP.NET開發人員在尋找部署到Linux平台的解決方案時會去嚐試。那麼Mono可以跨到那些平台上進行ASP.NET網站的部署呢?根據Mono官網的說明,Mono可以成功在Linux、macOS、Sun Solaris、IBM AIX、BSD系列包括OpenBSD、FreeBSD、NetBSD和遊戲主機PlayStation 4及XboxOne等等平台上運作,真正跨平台的一套開源網站framework。
  讓我們再回頭來看看ASP.NET,這在這段時間裏,微軟不斷在改進ASP.NET,將MVC的觀念也納入ASP.NET的範圍,我們可以運用ASP.NET開發符合MVC架構的網站,這就是是ASP.NET MVC,ASP.NET MVC可說是ASP.NET Core的前身。
  從最早的MFC及Windows Forms,和ASP網頁開發,到.NET Framework及ASP.NET出現的Web Forms開發,再演進到ASP.NET MVC架構的MVC網頁開發,最終,微軟發展出ASP.NET Core,這才是真正的能夠跨平台的.NET技術。ASP.NET Core能夠在Linux及MacOS X平台上安裝與執行,雖然沒有Mono那麼廣泛,但畢竟是微軟原生的.NET平台,支持度會比較完整與充分些。
  ASP.NET Core是個開放軟體,依照MIT及Apache 2.0的授權規範提供開源支援,因此,用ASP.NET Core開發的網站,及建置.NET Core 網站,都要遵照MIT及Apace 2.0的授權規範來部署,而簡單來說,MIT及Apache 2.0 License是相當寬容的授權方式,也因此,ASP.NET Core可以巳是開源軟體無誤。
  現在ASP.NET Core的最新版本是2.1版,從Preview版本推出到1.0版再到2.1版,只有短短的兩年多時光,這其間,Visual Studio也推出有條件開放的社群版本,而ASP.NET Core是其中的正式組件,只要安裝Visual Studio社群版本,就可以選擇安裝ASP.NET Core,以及開發ASP.NET Core的網站。
  如我們提到的,ASP.NET Core是由ASP.NET MVC演進而來的,可想而知ASP.NET Core也是屬於MVC的網頁架構,而事實上,ASP.NET Core的全名應該是ASP.NET Core MVC,由全名我們就可以瞭解ASP.NET Core的根源了。
  ASP.NET Core還在不斷演進中,微軟在過去兩年內不斷的改進ASP.NET Core的功能而持續推出新的版本,而且版本更新得非常快,我個人比較擔心這個情況會給人一種還不是穩定的技術的印象,而減降低採用ASP.NET Core為網站技術的意願。
 ASP.NET Core的版本更新則是透過Visual Studio的更新機制來自動完成。

  花了不少篇幅來說明ASP.NET Core的來源及歷史背景,其實也是在為後續文章鋪路,接下來我會先在視窗環境下,以傳統標準的方式進行ASP.NET Core專案開發演練,即以Visual Studio為開發工具來說明ASP.NET Core的特色,並嚐試寫一個完整應用的網站來介如何利用ASP.NET Core來建置網站。
 整個鐵人賽的文章內容規畫會先著重在Windows平台下應用Visual Studio來開發ASP.NET Core網站的實作,同時也花些篇幅來講講網站開發專案怎麼規劃的方法。
  然後我會在鐵人賽最後幾天再回到跨平台的議題,介紹如何在Linux、MacOS X環境下使用ASP.NET Core開發網站。
  今天,我們文章就在此告一段落了,明天再見。


上一篇
(Day 1) 一切都是從開源搞出來的玩意兒 - 上篇
下一篇
(Day 3) 在視窗環境下的ASP. NET Core - 使用傳統標準方法開發網站
系列文
跨平台開發利器- ASP.NET Core 30

1 則留言

1
海綿寶寶
iT邦大神 1 級 ‧ 2018-10-07 15:02:44

厚...
iT邦邦友應該都該來拜讀這段歷史才對
/images/emoticon/emoticon33.gif

暐翰 iT邦大師 1 級 ‧ 2018-10-07 15:14:00 檢舉

已拜讀 /images/emoticon/emoticon33.gif

我要留言

立即登入留言