精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
WebForms VS. MVC(翻譯)
本文翻譯自CodeProject上阿三寫的一篇文章,原文地址:http://www.codeproject.com/Articles/528117/WebForms-vs-MVC,講了有關ASP、ASP.NET WebForms以及ASP.NET MVC三種技術,這篇文章有助于ASP.NET初學者理解一些基本概念。)

介紹:

我很早之前就開始從事Asp.NET的開發工作,我也比較喜歡使用WebForms來開發Web程序。在2008年,微軟推出了一個叫Asp.NET MVC的東西,我當時和很多人一樣很好奇為什么還要再推出一個全新的Asp.NET技術呢。許多人說Asp.NET MVC代替了Asp.NET WebForms,但事實并非如此。它們兩者各有優劣,雖然沒有人告訴過我們該如何選擇哪種技術來開發web程序,但是我們可以討論一些關鍵事實來幫助我們以后作出選擇。本篇文章便是對兩種技術的介紹。

             

         

我們同時也找到以下問題的答案,

  • Asp.NET是什么?
  • Asp.NET WebForms是什么?
  • MVC是什么?
  • Asp.NET MVC是什么?

如果您是一個非常有經驗的Asp.NET MVC開發者,且已經非常了解MVC,那么這篇文章將會讓您重新復習一下與之相關的概念。

 

目錄:

  • 談談“可視化”
  • Web技術
  • Web開發中的“可視化”
  • 什么是Asp.NET?
  • 什么是Asp.NET WebForms?
  • Asp.NET 4.0
  • 什么是MVC?
  • 什么是Asp.NET MVC?
  • 如何選擇Asp.NET WebForms和Asp.NET MVC?
  • 總結

 

1.談談“可視化”

微軟最初推出一個概念叫“可視化”,在一些“可視化技術”諸如Visual Basic、Visual C++等的支持下,微軟實現了圖形用戶程序(Graphical User Applications)的快速開發(RAD)?!巴稀薄ⅰ白А?、“智能感知”等技術也使得開發者能夠將精力集中在系統的業務邏輯處理中而非UI界面開發上。但是,這種“可視化”的技術僅僅限制于桌面應用程序開發(Windows桌面程序,譯者注),當涉及到Web程序開發時,微軟只能選擇ASP。

 

 

 

 

 

 

2.Web技術

當我們談到Web技術時,有我們熟悉經典的ASP,PHP,JSP,ASP.NET WebForms,ASP.NET MVC等等。經典的ASP是微軟推出的Web技術之一。ASP最大的難點是它的“意大利式”的代碼風格不利于后期維護,我們假設這樣一個場景:有一些 TextBox文本輸入框和一個按鈕,當你點擊按鈕時,后臺會驗證文本框中的輸入數據,如果驗證成功,則將輸入數據存入數據庫;否則,在頁面顯示一個紅色的錯誤提示。你知道這個場景中最大的問題嗎?你必須自己手工做許多事情:

1.首先創建一個“自我提交”式頁面,即將表單Form的Action屬性值設置為頁面本身(自己處理表單中的數據,譯者注);

2.當你點擊提交按鈕時,TextBox控件中的值會被清空,所以后臺獲得用戶輸入的唯一方式便是從頁面提交的表單數據集中去查找(注意Post方式和Get方式的區別,譯者注);

3.如果后臺驗證數據失敗,你必須顯示地:

         1)將提交的數據一一對應地賦給每個TextBox控件(維持頁面上一次的狀態,譯者注);

         2)顯示錯誤提示信息。

(使用Ajax是一種驗證數據的方式,這里我僅僅是為了舉例來說明在經典的ASP開發中,我們必須手工完成的工作)

 

3.Web中的“可視化”

像諸如Visual Basic這樣的可視化技術的使用場合單一,當開發Web程序時,微軟只能選擇經典的ASP。當我們討論WEB和DESKTOP時(這里應該是Web程序和桌面程序,譯者注),我們應該考慮兩件事:

        1.狀態管理是如何進行的?

        2.請求/回復是如何進行的?

Web程序是基于“無狀態”的HTTP協議(有關無狀態的真實定義,參見博主前面的文章,譯者注)的,前后兩次請求之間沒有任何關聯,它不像桌面程序那樣既可以有臨時變量來存儲狀態,同時也完全地遵守“事件驅動模型”。與桌面程序類似,Web程序也需要等待用戶的輸入,但不同的是Web程序中,用戶的每次請求之間都是相互獨立的,即每次Request和Response都是全新的。最后,微軟推出了一個叫Asp.NET WebForms的東西,它被當做一個新的RAD工具并且也很容易掌握。

 

4.什么是Asp.NET?

Asp.NET是微軟發布的一款基于CLR的Web程序開發框架,可以使用多種語言,比如C#、VB.NET等。它支持兩種開發模式:Asp.NET WebForms和Asp.NET MVC。

 

5.什么是WebForms?

微軟最開始發布基于ASP的Asp.NET WebForms技術的目的是為了幫助Web開發者創建一個“無狀態Web”之上的抽象層,它能夠模擬“有狀態”的特性(類似桌面程序開發,譯者注)。在WebForms中引進了類似“自我提交”(將表單數據提交到頁面本身)、ViewState(在頁面提交時保存控件值)等概念。最有趣的是我們甚至不用寫任何一行代碼(一個網站就能運行起來,譯者加),在Asp.NET WebForms中,微軟試圖將類似Visual Basic這種可視化的(桌面,譯者加)開發模式引入到Web開發中。

那么現在我們來談談WebForms的優缺點。

本文中一切WebForms都指“Asp.NET WebForms”,譯者注

優點:

  • WebForms支持豐富的服務器控件

        當我們跟HTML打交道時,我們可能會發現,頁面顯示效果并不是始終是一樣的(瀏覽器兼容差異,譯者注)。在IE中看起來很好的UI效果再FireFox中很可能出現“錯位”或者其他變化。Asp.NET 服務器控件能夠區分不同的瀏覽器,對應地產生與之相匹配的HTML代碼,如果有需要,JavaScript也可能會額外產生。

        許多類似GridView或者ListView等服務器控件具備“數據綁定”的能力,這大大減少了我們的工作量。(雖然數據綁定很爛,呵呵,譯者注

  • 支持ViewState

        你可能經常聽見“HTTP是一種無狀態協議”這樣的話,通常情況下,在兩次請求之間,頁面的控件(這里指HTML控件,類似input等,譯者注)是不能夠自己保存自己的狀態,但是在WebForms中,有一種被叫作ViewState的東西能夠以隱藏域(hidden filed)的形式存在于靜態網頁中,它能夠保存任何一個服務器控件的狀態。

  • 事件驅動編程

        在以下技術的幫助下,微軟在Internet世界中引入的事件驅動編程。

        1.Code Behind

        2.自我提交(將表單數據提交給自己處理)

        3.ViewState

        開發者在后臺處理用戶輸入數據時,不再依賴于Post方式還是Get方式。比如TA只需要拖拽一些控件(如Button)到頁面中,然后雙擊添加事件處理程序,再在自動生成的代碼中編寫業務邏輯,這是開發者所需要做的東西,TA完全不用去考慮底層到底發生了什么(如怎樣從提交的數據集合中獲得用戶的輸入、怎樣保存頁面控件的狀態等等,這些全部由系統完成,開發者只需要像開發桌面程序(如WInform)那樣去開發Web程序。譯者注

  • RAD

        我認為再沒必要詳細解釋這個,上面三條足以能夠說明WebForms能夠加快Web程序的開發速度。它相當于在傳統Web開發的基礎上封裝了一個抽象層,開發者無需去弄清楚底層復雜過程。

  • 學習簡單

        使用強大的服務器控件和ViewState后,開發者只需要掌握少量的HTML和JavaScript知識。

缺點:

  • 項目架構

當使用WebForms開發Web程序時,并沒有一種預先定義好的統一項目架構,開發者可以隨意地選擇他們喜歡的架構。一些人可能選擇三層架構(UI層、業務邏輯層、數據訪問層),而另外一些高手可能更喜歡Model-View-Presenter(MVP)。甚至我們可以將所有的代碼都寫在Code Behind文件(.cs文件,譯者注)中,很明顯,這不是一個好的編程習慣。

  • 單元測試

        在WebForms中,Code Behind文件中包含許多的事件處理程序,這使得自動單元測試變得相當艱難。

        注:據我所知,即使在一些模仿測試的幫助下(如使用MOQ或者rhinomoq),我們也幾乎模擬不出來事件處理程序中的兩個參數(sender和eventargs)(sender一般代表激發事件的控件,譯者注)。

  • 性能

        ViewState雖然解決了經典ASP技術面臨的一些問題(如無法自動保存頁面狀態,參見前面,譯者注),但它同時也帶來了許多問題,ViewState以Hidden Field的形式存在于網頁中,隨網頁一起來回傳輸,這無疑增加了頁面數據量從而降低性能。

  • 重用性

我們來看看另外一個需要創建兩個UI界面的例子:

        1)需納稅員工界面

        2)無需納稅員工界面

這兩個頁面的Code Behind代碼中有許多的邏輯是相同的。一種做法就是只創建一個UI頁面,在該頁面的Code Behind中增加一些if的判斷語句。但這樣做會:

        1)這違背了單一職責原則(SRP)

        2)Secondly it may possible that both UI(沒清楚原文啥意思,譯者注

  • 與HTML控件交互困難

        在WebForms中,我們很難確定最終顯示在用戶瀏覽器中的HTML代碼是怎樣的(因為大部分HTML代碼由系統自動生成,譯者注),這使得我們很難在頁面中使用一些JavaScript庫,比如JQuery等。

  • SEO

        URL都是指向固定的aspx頁面(附帶一些查詢參數),這降低了用戶親和度也影響了SEO。

  • 不支持并行開發

        aspx頁面和Code Behind代碼緊密相連,所以多人很難同時去開發一個頁面(比如一個人開發aspx頁面而另外一個人編寫Code Behind代碼)。

 

6.Asp.NET 4.0

Asp.NET 4.0推出了許多新特性去解決上面提到的一些問題

  • ViewState

        提供了一種可以控制ViewState大小甚至禁用ViewState的方法(但是并沒有一個確定或者強制性的規則要求開發者去這樣做)。

  • URL路由

        提供了一種可以代替頁面物理地址的方法。

  • ID

        在Asp.NET 4.0中,我們能夠更好的控制頁面控件的ID,這樣以來,我們可以更好地去使用一些類似Jqeury的腳本庫(但是我們還是不能完全去控制自動產生的HTML)。

即使在Asp.NET發生了革命性的更新后:

        1)它還是沒能解決單元測試遇到的問題

        2)我從沒看見某個人去禁用ViewState(個人觀點,呵呵)

        3)我們可以更好地去操控頁面HTML,但是仍然不能完全控制,依舊不能徹底地應用JavaScript腳本庫。

 

7.什么是MVC?

MVC是一種已經出現了很久的架構模式。很多人在Java中使用到它,它并不是微軟提出來的心概念。雖然Asp.NET MVC是我們本次討論的主題,但是我覺得在那之前,我們應該先搞清楚一些技術概念。

  • 模式

        簡單來說,模式是我們解決一個問題的解決方案。

  • 架構模式

        架構模式指在子系統級別上解決問題的方式,它主要解決與項目架構有關的問題。它告訴我們怎樣劃分系統甚至為什么要這樣劃分。我們按照要求創建類庫、組件或者Web服務來解決最終的問題。

  • MVC

        當我們討論系統時,它一般包含用戶輸入邏輯、業務處理邏輯以及UI顯示邏輯等,MVC是一種架構模式,它能夠讓我們開發出各個模塊之間松耦合的應用程序。 MVC最主要的目的是“關注點分離”,它能夠分離開UI顯示、業務邏輯以及用戶輸入等。根據MVC的規定,一個系統應該被劃分為Model、View以及 Controller三個部分:

  • Model:它被當做一個可以處理業務規則、邏輯以及數據的智能體,同時它獨立于MVC中其它兩個部分(C和V)(不訪問Controller和View,譯者注
  • Controller:它負責接收用戶請求、分配請求給處理者,它可以訪問Model和View。
  • View:它被當做一個啞巴,專門呈現最終的數據給用戶。它可以是一個excel表單,也可以是一個包含許多記錄的web頁面甚至是一個純文本。它可以訪問Model。

 

 

 

8.什么是Asp.NET MVC?

 

Asp.NET MVC是微軟的一種新的Web程序開發框架,主要強調了功能模塊的分離以及易測試性。它運行在CLR之中并以MVC為基礎,它不再支持ViewState和服務器控件,所以我感覺回到了傳統Web開發。我們來討論一下Asp.NET MVC的優缺點:

優點:

  • 項目架構

      Asp.NET MVC的優點之一便是它強制要求功能塊的分離,所以把東西搞得復雜多樣的情況很少。

 

 

 

 

 

 

 

 

 

 

  • 測試驅動開發和重用

        1)在MVC中,Controller是一個單獨的類,所以自動測試稱為可能

        2)Controllers不依賴于任何View,所以它完全能夠被多個View重用。

  • 性能

        Asp.NET MVC不支持ViewState,因此它不會增加頁面數據大小。

  • 對HTML的完全控制

        Asp.NET MVC不支持服務器控件,只能使用HTML控件。用戶在瀏覽器看到的HTML與我們在開發階段編寫的幾乎一致,在開發階段能夠對HTML元素進行很好的操控,因此我們可以很好的使用到第三方腳本庫比如JQuery等。

  • 支持并行開發

        在Asp.NET MVC中,各個部分都是松耦合的,一個人可以負責Controller、另外一個一個負責View,而第三個人可以負責Model。

  • SEO, URL routing and REST

        豐富的URL路由特性讓我們可以把每個URl都當做一個資源。同時URL的易讀性也增加了用戶親和度并且有利于SEO。

  • 擴展性

        Asp.NET MVC中支持多視圖引擎。

  • 已有的Asp.NET特性

        由于Asp.NET MVC是基于成熟的Asp.NET框架的,因此原有的許多優秀特性都可以繼續試用,如Windows身份驗證、Session等等。

缺點:

  • 不易學習

        事件驅動以及ViewState的缺失使Asp.NET MVC不再簡單易學,尤其對于一些沒有Web開發經驗的人。

 

9.Asp.NET MVC運行機制

 

1.用戶使用URL請求服務器

2.請求先進入Controller(路由引擎決定一個請求應該由哪個Controller處理,本文未談及此內容)

3.如果有需要,Controller會訪問Model來獲取數據

4.Model訪問數據庫,并且數據返回給Controller

5.Controller選擇一個合適的View(比如包含HTML表格頁面)

6.Controller將數據(第4步由Model返回的)傳給第5步選擇的View

7.Controller將View發送給用戶(瀏覽器)。

以上只是Get方式的請求,Post方式類似。唯一的區別就是,用戶不是在地址欄中輸入URL,而是在已返回的頁面上點擊按鈕等操作,之后服務器端的處理流程類似。

 

10.如何選擇Asp.NET WebForms還是Asp.NET MVC?

對于一個特定的系統或者一個特定的團隊成員組成,兩者都有可能稱為“最好的選擇”。當面臨選擇其中的一種技術作為開發平臺時,了解兩者的技術優劣非常重要。

當你要做出選擇時,有兩個非常重要的因素是:

1.RAD(Rapid Application Development)

       如果你想快速開發出系統(比如一個演示demo,譯者注),Asp.NET WebForms是你最好的選擇,你甚至根本不用考慮使用Asp.NET MVC去實現“快速開發”。

2.單元測試

      對于你的系統,如果自動單元測試非常重要,那么Asp.NET MVC是你的選擇。

除了上面2條,你最好將你項目的需求寫下來,然后再比較WebForms和MVC的優缺點,如果可以的話,你可以試圖問問自己以下問題:

1.你的團隊有很好的WebForms或者Windows Forms開發經驗嗎?

嗯,如果回答是正確的,那么讓你的團隊再去學習Asp.NET MVC將是一件困難的事情,因為他們已經熟悉了事件驅動編程以及習慣了ViewState,“改變習慣”是一件很艱難的工作。這時候,給Asp.NET WebForms投上一票。

2.你的團隊有很好的Asp.NET MVC開發經驗嗎?

回答如果是,投Asp.NET MVC一票。

3.你的團隊有ASP經驗,或者一些非微軟技術(Android、ios、JSP、ROR、PHP)開發經驗嗎?

如果你曾經是一個ASP或者JSP開發者,那么你可能很熟悉HTTP的兩種請求方式(GET和Post),你甚至也很了解MVC,因為那些技術大多數默認采用了MVC。這時候投Asp.NET MVC一票。

4.JavaScript是否需要大范圍被使用?

如果是,那么投Asp.NET MVC一票,因為它完全可以操控HTML元素。

5.追求高性能嗎?

Asp.NET MVC不支持ViewState,因此能夠有更好的性能。這時候投Asp.NET MVC一票。

6.計劃重用相似的輸入邏輯代碼嗎?

如果是,投Asp.NET MVC一票。

 

總結

我認為,你應該了解足夠的信息之后,再決定使用哪種技術,而這些很大程度依賴于你的項目和你的開發團隊。希望你們喜歡這篇文章,謝謝你們耐心閱讀本文。

 

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

以上為翻譯全文,斜體字為譯者自行增加的內容。全文并沒有一字一句的按照原文翻譯,部分屬于譯者自己理解而寫出來的。

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
七天學會ASP.NET MVC (1) -- 深入理解MVC
[譯]WebForms vs. MVC
三層架構與MVC哪個更適合做大型應用開發
常用的php開發框架,趕快收藏!
多方位全面解析:如何正確地寫好一個界面
6 個值得好好學習的 JavaScript 框架
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 建始县| 乐昌市| 桃江县| 兰坪| 南汇区| 冷水江市| 新沂市| 隆安县| 萨迦县| 浑源县| 河津市| 疏勒县| 友谊县| 连南| 清苑县| 墨竹工卡县| 淄博市| 板桥市| 扶沟县| 漳州市| 应城市| 商水县| 遵义县| 滦南县| 广宁县| 万山特区| 达孜县| 宜昌市| 乃东县| 澄迈县| 长武县| 平安县| 曲阳县| 绿春县| 镇坪县| 南溪县| 合川市| 合江县| 东兰县| 九龙坡区| 莆田市|