ASP.NET/關於ASP.NET
< ASP.NET
ASP.NET支持三種模式:Web Pages、Web Forms和ASP.NET MVC
Web Pages
編輯Web Forms
編輯Microsoft發佈的ASP.NET,通過在http的無狀態和為開發人員模擬狀態的模型上創建更高層次的抽象解決了asp中存在的很多問題。在web forms框架中引入一些新概念比如:「self postback」(提交表單數據到本頁)、「ViewState」(在postback回調期間維護視圖狀態)等。在web forms框架,微軟已嘗試將可視化模型引入到web應用程式開發中。
- 優點:
- Web Forms支持豐富的伺服器控件:單純的HTML客戶端控件時,在不同瀏覽器終端,控件的展現並不總是一致。ASP.NET伺服器控件會檢測到瀏覽器種類並生成對應的html和javascript。很多伺服器控件像GridView和ListView可以綁定數據,從而減少了大量的代碼編寫。
- 支持視圖狀態ViewState:「HTTP是無狀態的協議」,通常在多個請求之間控件不會保持控件值。Web Forms框架中通過將每個控件狀態以「隱藏域」的形式存在當前表單頁面來達到「有狀態」,這就是視圖狀態。
- 事件驅動編程,提供了:
- Code-Behind (代碼後植)技術:ASP.NET通過ASPX頁面指向CS文件的方法實現顯示邏輯和處理邏輯的分離,這樣有助於web應用程式的創建。比如分工,美工和編程的可以個干各的,不用再像ASP以前那樣後台代碼和html代碼都混在一起,難以維護。
- 自動回發機制(Self postback mechanism)
- 開發人員不再依賴POST、GET方法來處理用戶與伺服器之間的交互。可以拖控件放到頁面上(比如按鈕),只需要雙擊控件以生成對應的後台代碼以在伺服器上處理用戶的點擊邏輯。
- 快速應用程式開發:豐富的伺服器控件,事件驅動模型和視圖狀態都很大程度上增加了開發速度,開發者將透明化這背後複雜的實現,從而能更關注應用程式的業務邏輯。ASP.NET Webforms是一個RAD/VISUAL(快速可視化)的Web程序開發技術。也就是說,開發者簡單地拖拽控件到窗體設計器上,VS就會在Behind Code(aspx.cs文件,譯者注)生成代碼。換句話說,你向設計器中拖放一個Button按鈕後,便可以在它的事件處理程序中編寫代碼了。
- 學習成本低。使用強大的伺服器控件和視圖狀態的開發者,可以開發實用的應用程式而不需要太多HTML和Javascript技能。
- 缺點
- 沒有預定義的項目架構。開發者可以靈活的選擇他們想要的項目架構。你可以選擇基本的三層架構來將系統分成表現層(UI)、業務邏輯層(BLL)、數據層(DAL)或者更先進的MVP(Model-View-Presenter)架構。也可以選擇只使用code-behind技術,將所有邏輯都寫在這,但這並不是一個好的項目架構方案。
- 單元測試:在Web Forms架構的code-behind技術中,使用了大量的事件處理函數,讓其不可能進行自動單元測試。
- 可重用性。讓我們討論另一個示例,我們構建兩個UI:納稅員工頁面與非納稅員工頁面。現在這兩個頁面將共用大部分後台業務邏輯。創建一個頁面後,通過添加一些if判斷條件創建第二個頁面。 這將違反程序設計的單一職責原則,即一個類,只有一個引起它變化的原因。應該只有一個職責。每一個職責都是變化的一個軸線,如果一個類有一個以上的職責,這些職責就耦合在了一起。這會導致脆弱的設計。當一個職責發生變化時,可能會影響其它的職責。另外,多個職責耦合在一起,會影響復用性。例如:要實現邏輯和界面的分離。
- 不能完全控制HTML:Web Forms架構中,很多時候我們無法確定伺服器控件在終端瀏覽器中生成的html,這樣很難集成第三方JavaScript 庫,如jQuery。
- SEO:URL指向特定的ASPX頁面,可能還包含一些查詢字符串。這樣對於搜尋引擎來說是不友好的。
- 缺少並行開發支持:ASPX頁面和後台代碼文件是緊密耦合的,所以不方便2個開發者同時開發頁面和後台代碼。
ASP.NET MVC
編輯MVC是一個架構模式,微軟將它引入到ASP.NET MVC架構中。MVC系統分為M(Model),V(View) 和 C(Controller)。
- Model,是數據容器,不包含任務業務邏輯。
- Controller,接收並分配用戶交互邏輯或輸入邏輯發出的請求,它需要知道MVC的Model和View。
- View,被定位為模型數據的輸出展現,它可能是一個excel表格,一個顯示記錄列表的web頁面或一個簡單的文本。它只需要知道MVC的Model。
ASP.NET MVC不支持ViewState和伺服器控件。
- 優點:
- 項目架構。ASP.NET MVC架構降低了程序間的耦合性
- 測試驅動開發和重用性
- MVC的Controller,是一個獨立的類,所以支持測試驅動開發。
- MVC的Controller,不綁定任何特定的View,所以能重用於多個View。
- 性能:ASP.NET MVC框架不支持ViewState,所以不會有自動狀態管理機制,從而降低了頁面傳遞的尺寸,提高了程序性能。
- 完全的HTML控制:ASP.NET MVC 不支持伺服器控件,唯一的選擇是使用客戶端輸入控件,這樣我們能完全控制最後展現的html。所以ASP.NET MVC 架構能很容易的與第三方JavaScript庫(eg:Jquery)集成開發。
- 支持並行開發:ASP.NET MVC架構中的各層是鬆散耦合的,所以一個開發者在開發Controller的同時第二個開發者開發View並且第三個開發者開發Model。這就是所謂的並行開發。
- SEO,URL重寫和REST:豐富的路由規則讓每個URL被視為一個資源,即支持RESTful。同時,用戶用好的、可讀的URL能改善SEO。
- 可擴展:ASP.NET MVC支持多種視圖引擎,eg:aspx、razor,如果需要還能開發自己的視圖引擎。
- 繼承ASP.NET特性:ASP.NET MVC框架構建在成熟的ASP.NET框架之上,所以提供開發者很多好功能,如表單驗證、windows身份驗證、緩存、會話等等。
- 缺點:
- 提高了學習成本:沒有事件驅動編程模型和視圖狀態,使得對於缺少web應用開發經驗的開發者來說很難上手。