ASP.NET MVC與ASP.NET WebForm

来源:https://www.cnblogs.com/supersnowyao/archive/2018/01/06/8195900.html
-Advertisement-
Play Games

ASP.NET MVC是微軟公司的一款WEB開發框架,整合了“模型-視圖-控制器”架構的高效與整潔,是敏捷開發最現代的思想與技術。它是傳統ASP.NET WebForm的一個完善的替代品。 1、當今的Web開發 1)REST(Representational State Transfer)已經成為應 ...


     ASP.NET MVC是微軟公司的一款WEB開發框架,整合了“模型-視圖-控制器”架構的高效與整潔,是敏捷開發最現代的思想與技術。它是傳統ASP.NET WebForm的一個完善的替代品。

1、當今的Web開發

     1)REST(Representational State Transfer)已經成為應用程式在HTTP上互操作的主要體系架構,完全使SOAP失色。REST是根據表示真實世界實體的資源(URI)和表示在這些資源上可用的標準操作方法(HTTP方法)來描述一個應用程式。通過HTTP方法與資源地址的組合就可以對資源執行相應的操作,這種組合就是REST,執行這種操作的請求也稱為REST化的請求。(對於REST的理解個人還是不透徹,後面會對此概念進行補充

當前的Web應用程式不只是提供HTML服務,通常也需要將XML或JSON數據提供給用戶,而WebForm很難支持。

     2)整個軟體行業向著敏捷與測試驅動開發方向的發展,如單元測試工具(NUnit、xUnit)、模仿框架(Moq、Rhino、Mocks)、控制反轉容器(Ninject、AutoFac)、持續集成伺服器(CruiseControl、TeamCity)、對象關係映射器(NHibernate、Subsonic、EF、Dapper、Petapoco)、UI自動化工具的提供。(測試驅動開發TDD思想:首先描述想要得到的行為範例,稱為測試規範;然後進行軟體設計,這樣通過執行依附於這一實現的一套測試,來驗證應用程式的穩定性和正確性

     3)順應Web標準和REST化的趨勢。

2、ASP.NET WebForm的歷史與問題

     ASP.NET WebForm的技術堆棧,如下圖所示:

    

     此圖的含義是WebForm建立在ASP.NET之上,而ASP.NET又建立在.NET平臺之上,MVC框架所起的作用是替代WebForm。

     WebForm的設計思想是,讓Web開發在感覺上與Windows Form開發相同。開發者不再需要以一系列獨立的HTTP請求與響應進行工作,可以認為它是一種狀態化的UI,人們可以忘記WEB及其無狀態本質,轉而用一種“拖--放”式設計器來創建UI,並設想所有事情都發生在伺服器上。

     隨著時間的推移,WebForm在實際項目中出現了一些缺陷:

     1)視圖狀態重負:維護狀態的實際機制,也就是ViewState(視圖狀態)導致在客戶端與伺服器之間傳輸大塊數據(達到幾百KB),而且來回於每次請求之間,導致響應時間很慢,增加了伺服器的帶寬需求;

     2)頁面生命周期:連接客戶端與伺服器端事件處理器代碼的機制很複雜,對於應用程式運行期間很難進行維護;

     3)關註分離的錯誤理念:本身將代碼從HTML提取出來,放到後臺代碼類中進行處理是很一種很好的方式,但是一些開發者在後臺代碼中將表現代碼與應用業務邏輯混合在一起,導致最後代碼混亂並難以維護;

     4)HTML的受限控制:伺服器控制項將自己渲染成HTML,但並不是所希望看到的HTML,在ASP.NET 4之前,並不能很好的使用CSS。同時會生成不可預知或複雜的ID,這樣JavaScript就很難進行訪問。

     5)有缺陷的抽象:WebForm試圖儘量隱去HTML和HTTP(這是通過WebForm的抽象層實現的)。當你實現自己的方法時,需要放棄這種抽象,迫使採取回發事件機制的逆向工程。所以這種抽象對於開發者而言就構成一個極大的障礙和挑戰;

     6)低可測試性:WebForm的這種緊耦合體繫結構並不適合於單元測試,對於集成測試也很具有挑戰性;

3、ASP.NET MVC的特點

     1)ASP.NET MVC框架實現了MVC模式(MVC模式在1978年就已經提出來了),由於ASP.NET MVC極大的改善了關註分離,所以特別適用於Web應用程式。因為與MVC應用程式的交互遵循著用戶動作與視圖更替的自然周期,在這個周期中,假設視圖是無狀態的。這與支撐Web應用程式的HTTP請求與響應方式非常吻合。

     2)可擴展性,MVC框架被構建成一系列獨立的組件,如路由系統、視圖引擎、控制器工廠,你可以很容易地用一個自己的不同實現來替換這些組件,通常有三種選擇:

          a、使用組件現行的預設實現,此種可以滿足大多數應用程式;

          b、派生預設實現的一個子類,以調整其行為;

          c、用介面或者抽象基類的一個新的實現來完全替換該組件;

     3)HTML和HTTP上的嚴密控制,ASP.NET MVC會產生整潔與標準相容的標記,其內置的HTML輔助器方法,可以產生與標準相容的輸出。ASP.NET MVC生成的頁面不包含任何ViewState數據,這種對帶寬的節約,可以極大的改善用戶的體驗,並且可以對瀏覽器與伺服器之間傳遞的請求加以控制。

     4)可測試性,ASP.NET MVC應用程式不僅可以進行單元測試,還可以與UI自動化測試工具良好協作。

     5)強大的路由系統,採用REST風格的路由方案,有如下好處:

          a、搜索引擎對URL中找到的關鍵詞有明顯的權重,對同樣的關鍵詞的搜索,極有可能會轉向一個較為簡單的URL地址;

          b、許多Web用戶現在對URL有足夠的領悟,並且願意在瀏覽器的地址欄目中輸入URL地址;

          c、當理解URL地址的結構後,人們才會更有可能鏈接它,並向其他人共用;

          d、此種URL結構並不會將應用程式的技術細節、文件夾、文件名稱等結構暴露給互聯網。對於底層實現可以自由修改,而不會破壞鏈接;

     6)建立在ASP.NET平臺之上,一方面ASP.NET MVC是基於.NET平臺的,因此可以靈活的使用任何.NET語言來編寫代碼,可以使用廣泛的.NET類庫和大量的第三方.NET類庫體系;另一方面,已經形成的ASP.NET平臺特性,如認證、成員、角色、配置文件、國際化等可以減少開發和維護Web應用程式所需要的代碼量。

     7)ASP.NET MVC是針對.NET 4.X而建立的,因此它的API可以充分利用當前語言和運行時的創新,如await關鍵字、擴展方法、lambda表達式、匿名、動態類型、LINQ。

     8)ASP.NET MVC是開源的。

4、ASP.NET MVC與ASP.NET WebForm的比較

     首先需要說明的是,雖然ASP.NET MVC相對於ASP.NET WebForm來說有一些優勢,但這並不意味著前者要替代後者,也不意味著後者要消亡。

  • WebForm的觀念是,UI應該是狀態化的,其結果是,在HTTP和HTML之上添加一個抽象層,用視圖狀態(ViewState)和回發(Postback)來創建狀態化的效果。這是一種“拖放”式Windows Form風格的開發。
  • MVC採納了HTTP真正無狀態的本質。MVC框架要求用戶理解Web應用程式實際的工作方式,在理解的前提下,進行維護和擴展,提供一種功能強大、簡單的、整潔的、現代的方法來編寫Web應用程式,擺脫複雜的限制。
  • 所以說,開發小型的,企業內部型應用程式,可以考慮採用WebForm的方式來實現,但更多的時候,開發互聯網應用程式或者大型的應用程式時,MVC無論從效率、相容性、維護性都是一種更好的選擇。

參考資料:《精通ASP.NET MVC X》

 

 

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:裝飾器 1 函數對象有一個__name__屬性,可以拿到函數的名字 上面的log,因為它是一個decorator,所以接受一個函數作為參數,並返回一個函數。我們要藉助Python的@語法,把decorator置於函數的定義處: 調用now()函數,不僅會運行now()函數本身,還會在運行now( ...
  • 一. 虛擬環境搭建 在開發中安裝模塊的方法: pip install 模塊名稱 之前我們安裝模塊都是直接在物理環境下安裝,這種安裝方法,後面一次安裝的會覆蓋掉前面一次安裝的。那如果一臺機器上面開發多個項目使用到不同版本的模塊呢?怎麼樣做才能不受版本影響!那麼需要用到虛擬環境,每個虛擬環境互相隔離,在 ...
  • 1、概念 1.0 線程的和進程的關係以及優缺點 windows系統是一個多線程的操作系統。一個程式至少有一個進程,一個進程至少有一個線程。進程是線程的容器,一個C#客戶端程式開始於一個單獨的線程,CLR(公共語言運行庫)為該進程創建了一個線程,該線程稱為主線程。例如當我們創建一個C#控制台程式,程式 ...
  • 相對之前發的日誌記錄來說,此類將程式記錄處理與寫磁碟操作分離,用戶代碼部分,將日誌放到隊列,並通知線程將日誌寫到文件: 1.公共類: using System;using System.IO;using System.Collections.Generic;using static System.C ...
  • 一.C#關鍵字擴充解釋: 1. new : 1)開闢空間 2)調用構造 3)實例化對象 2. this: 當前類的實例,用來區分入參和成員變數 3. void void修飾的方法表示返回值類型為空,並不代表沒有返回值 二.構造方法: 1.構造函數 特點: 方法名與類名相同 沒有返回值類型 主要完成對 ...
  • 這裡用的是SWT/JFace開發application中SWT自帶的org.eclipse.swt.ole.win32 包可以支持內嵌OLE和ActiveX。 具體用法如下: //創建一個OleFrame做為OLE(或ActiveX)的框架 OleFrame oleFrame = new OleFr ...
  • huanent.printer2.0是一個專註消費小票列印的類庫。擁有許多先進的特性例如居中列印、自動換行等特性,可以通過簡潔的代碼來列印出複雜的消費小票。huanent.printer通過MIT方式授權,可隨意用於商業用途,只要註明作者即可。 你可以通過github獲取源碼與提交bug:https ...
  • 效果如圖: 如果報錯: managementobjectsearcher 缺少using 為什麼已經引用了using System.Management 使用ManagementObjectSearcher時為什麼提示未引用空間 解決辦法: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...