最近公司招.NET開發,面試了很多人,都說自己做過ASP.NET Webform和MVC的開發,於是問:“ASP.NET和ASP.NET MVC的區別在哪?”沒有一個人的回答令人滿意。這里就再老生常談,啰嗦幾句。
ASP.NET WebForm
ASP.NET Webform提供了一個類似於winform的事件響應GUI模型(event-driven GUI),隱藏了HTTP、HTML、JavaScript等細節,將用戶界面構建成一個服務器端的樹結構控件(Control),每個控件通過ViewState保持自己的狀態,並自動把客戶端的js事件和服務器端的事件聯系起來。這種做法使得開發WinForm和WebForm程序具有相近的開發體驗,填平WinForm開發(有狀態、面向對象的)和WebForm開發(無狀態、面向HTML的)之間的鴻溝。
這種設計在大型網站開發的時候,暴露出一系列弱點:
- ViewState可能過大。訪問量非常大的情況下,viewstate占用的流量相當可觀,這樣直接影響頁面傳輸速度。
- Page Life Cycle:過於復雜。比如控件的Init事件在Page的Init事件之前執行,而Load事件是控件后執行。事件處理的事件
- 缺乏對HTML的控制:一般每個控件負責自己的HTML輸出,開發人員無法修改輸出的HTML結構,除非自己寫控件。而且HTML元素的ID比較復雜,也不便於js訪問。
- 界面設計和邏輯開發的關注分離做的不好:Webform開發是一個頁面對應一個code-behind class,原本的目的是將展示和邏輯分離。但是在實際開發的時候,面對某些需求,還是經常會在class中寫一些控制界面展示的代碼。
- 對測試的支持不好:頁面和code-behind class綁定在一起,無法單獨對邏輯進行測試;不支持單元測試。
ASP.NET MVC
ASP.NET MVC的優點如下:
- 采用MVC架構:分離了關注點,比如開發Controller的時候,只需關注如何處理交互,從request中獲得什么數據,業務邏輯交給Model處理,還需要把哪些數據傳給頁面用於展示,如何展示交給View處理。
- 更好的擴展性:ASP.NET MVC框架由一些列獨立的組件構成,你可以輕松替換,如路由系統、the View Engine、the controller factory或者其它框架的組件。
- 更好的可測性:關注點的分離另外一個好處就是更好的可測性。
- 能夠完全控制輸出的HTML。
- 強大的路由功能。