關於asp.net framework的本質

很久沒有聊聊asp.net了,但畢竟asp.net跟我緣分不淺,或許該找個時間來談談。不過,今天我們試試看換一種方式,也讓大家自我挑戰一下,題目來囉...

  1. 我們說asp.net是一個web開發框架(framework),現在的asp.net framework提供了三種不同的方式(途徑、架構、風格)來建立網站,分別是哪三種?
  2. 這三種分別有哪些特性(或優缺點)呢?
  3. 這三種可以混用嗎?

來公布答案。

首先,千萬別執著對錯,因為我這題目本身就很爛(題意不清),其實我們應該把.net core和asp.net分開來看...這題談的不是asp.net core, 但題目沒說清楚,會讓人誤會。

因此,重點不是對錯,而是我們要藉著這題目來釐清整個asp.net的架構與觀念。

首先,題目與答案都在這邊:

ASP.NET is great for building standards-based websites with HTML5, CSS3, and JavaScript. ASP.NET supports three approaches for making web sites. ASP.NET Web Forms uses controls and an event-model for component-based development. ASP.NET MVC values separation of concerns and enables easier test-driven development. ASP.NET Web Pages prefers a single page model that mixes code and HTML markup. You can mix and match these techniques within one application depending on your needs - it's all One ASP.NET.

上面這段話的來源是:
https://www.asp.net/get-started/framework

所以,從這邊我們可以知道,先撇開.net core不談,asp.net framework (on windows),主要approaches Web Sites的方法有三,分別是 WebForms, MVC, 與 Web Pages...這三者位階相同...有趣的是…Web Pages是最常被忽略的。

而另一些常見的答案諸如 Web API,SignalR ...也是asp.net框架的一部分(但不能說它主要是用來『作網站』的,嚴格說起來它們的用途是通訊)。

接著,你繼續看上面那段英文的最後一段,這三種技術,在技術上『是可以』混用的
(David註:只要你夠熟)

而特色呢?分別是:

Web Forms : uses controls and an event-model for component-based development.
MVC : separation of concerns and enables easier test-driven development.
Web Pages : a single page model that mixes code and HTML markup.

上面Web Forms和MVC的特色說得很清楚,Web Pages可能有人會覺得有點語焉不詳,但你可以從底下這邊找到更多說明:
https://www.asp.net/get-started/websites

從上面你可以知道, Web Pages有點像是過去的ASP(Active Server Pages),提供開發人員一個最輕量級的方式來建立dynamic web content(動態網頁內容,就是從伺服器端動態抓取資訊,塞到html裡面往前端送的那種東西),和過去ASP不同的地方是,Web Pages它主要採用了Razor View。

用比較容易理解的方式來說明:
Web Pages : 最簡單,如果IT/MIS只是要臨時開發一兩個頁面,我會推薦選擇這個方式。
Web Forms : 事件驅動、主要模擬視窗物件導向開發的控制項、具有視覺化開發、快速開發(RAD)...的特性。
MVC : 主要價值就是關注點分離(SoC)、因此也最容易實現測試驅動開發。

我自己覺得MVC對於開發人員的素質要求相對比較高,如果單就一個功能點來說,透過這個方式寫出來的Code也肯定會最多。因為SoC,因此一個功能本質上應該拆成Model/View/Controller三塊來看(來思考),架構上相對複雜(因為比起單純的頁面多了Routing、Controller的概念),對於初學者進入障礙就高。

而Web Forms則是開發速度快,馬上能看到結果,容易上手,但也相對最不容易開發出職責分離的架構。

Web Pages則是最直覺容易開發,但基本上沒什麼架構可言,如果頁面一多,系統一寫大基本上難以維護,但如果只是幾個頁面,那當然就非常方便好用。

就體質上來說,Web Pages 不容易寫出有職責分離、有架構、分層負責的程式碼。但Web Forms和MVC都可以(當然前提是開發人員素養夠)。Web Forms要寫出具有架構職責分離的程式碼得靠毅力(因為容易被惡魔引誘),而MVC則是會強迫開發人員往這個方向走。

寫MVC的人如果沒能做到SoC 或 unit test/test-driven,那採用MVC的價值就大幅降低了,因為他的主要目的就是在這。而Web Forms則是為了模擬傳統的Windows 應用程式開發方式所生出來的框架,事件驅動的 event-model 和控制項是其特色,但代價就是為了去模擬狀態(State)而導致產生臃腫的ViewState。

MVC和Web Pages對於HTML Tag控制的自由度最高,而Web Forms則相對很低(特別是大量使用模擬桌面應用程式開發的Web Controls時)。

最後再順便談談 asp.net core,這個.net core,主要是為了讓系統能跨平台(例如run在Linux上),為了這個跨平台,所有與IIS和windows平台特性的相依性都必須拿掉,這意味著過去你熟悉的system.XXX之類的namespace開始無法使用,導致.net code基本其實就是整個打掉重練,跟原本的asp.net骨子裡差異很大。

但打掉重練也就沒有包袱,可以有新的開始,但當然也意味著你過去學的不一定都能延續。至於要不要使用.net core,或是跨平台時乾脆就換一種開發技術(例如node.js),這見仁見智,看你自己的選擇了。

所以簡單的幾個結論...

  1. 如果你想跨平台,可選用.net core(但我們今天上面那個題目,其實主要討論的不是這部分)。

  2. 如果你想寫較具有架構的網站或Web應用程式,你可以選擇 MVC 或 Web Forms,

  3. 如果只是想寫幾個頁面從伺服器端撈資料呈現給用戶,不是什麼大架構大系統,可以考慮 Web Pages。

MVC和Web Forms幾乎是不同的框架,使用目的基本上不同,也很難直接比較,但選用時其價值與核心精神(上面有討論)則必須掌握。否則若選了某一種開發方式卻沒有用到其特性,就很可惜了。

而真的有必要時,只要你夠熟悉,這三種寫法在技術上是可以混在一起用的。
(.net core則當然無法跟傳統的asp.net on windows混用)

---------------------------

以上,有沒有幫你更釐清asp.net的本質?
還是...你被搞得更暈了呢? :)

其實,不管你使用哪一種技術建立網站,只要能發揮其特性,避開缺點,凸顯其價值,並且在團隊中能夠對成員與老闆解釋的清楚,對企業來說,已經是很難得的人才了。

相關文章: http://studyhost.blogspot.tw/search/label/Framework
相關教育訓練: http://www.studyhost.tw/NewCourses/Architecture

留言

Terence Mak寫道…
很詳細的說明,謝謝你這篇文章! :)
isDavid寫道…
@Terence Mak,
不客氣

這個網誌中的熱門文章

使用 Airtable 在小型需求上取代傳統資料庫

在POC或迷你專案中使用 LiteDB

專業的價值...

精彩(且驚人)的Semantic Kernel入門範例

周末讀書會 - 一如既往