MVC簡介


1. MVC模式

  MVC模式是一種軟件架構模式。它把軟件系統分為三個部分:模型(Model),視圖(View)和控制器(Controller)。MVC模式最早由Trygve Reenskaug在1974年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代為程序語言Smalltalk發明的一種軟件設計模式。MVC模式的目的是實現一種動態的程序設計,使后續對程序的修改和擴展簡化,並且使程序某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程序結構更加直觀。軟件系統通過對自身基本部份分離的同時也賦予了各個基本部分應有的功能。   

  模型(Model) “數據模型”(Model)用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。“模型”有對數據直接訪問的權力,例如對數據庫的訪問。“模型”不依賴“視圖”和“控制器”,也就是說,模型不關心它會被如何顯示或是如何被操作。但是模型中數據的變化一般會通過一種刷新機制被公布。為了實現這種機制,那些用於監視此模型的視圖必須事先在此模型上注冊,從而,視圖可以了解在數據模型上發生的改變.

  視圖(View) 視圖層能夠實現數據有目的的顯示(理論上,這不是必需的)。在視圖中一般沒有程序上的邏輯。為了實現視圖上的刷新功能,視圖需要訪問它監視的數據模型(Model),因此應該事先在被它監視的數據那里注冊。

  控制器(Controller) 控制器起到不同層面間的組織作用,用於控制應用程序的流程。它處理事件並作出響應。“事件”包括用戶的行為和數據模型上的改變。

  在最初的JSP網頁中,像數據庫查詢語句這樣的數據層代碼和像HTML這樣的表示層代碼混在一起。經驗比較豐富的開發者會將數據從表示層分離開來,但這通常不是很容易做到的,它需要精心地計划和不斷的嘗試。MVC從根本上強制性地將它們分開。盡管構造MVC應用程序需要一些額外的工作,但是它帶給我們的好處是毋庸置疑的。

  首先,多個視圖能共享一個模型。如今,同一個Web應用程序會提供多種用戶界面,例如用戶希望既能夠通過瀏覽器來收發電子郵件,還希望通過手機來訪問電子郵箱,這就要求Web網站同時能提供Internet界面和WAP界面。在MVC設計模式中,模型響應用戶請求並返回響應數據,視圖負責格式化數據並把它們呈現給用戶,業務邏輯和表示層分離,同一個模型可以被不同的視圖重用,所以大大提高了代碼的可重用性。

  其次,控制器是自包含(self-contained)指高獨立內聚的對象,與模型和視圖保持相對獨立,所以可以方便的改變應用程序的數據層和業務規則。例如,把數據庫從MySQL移植到Oracle,或者把RDBMS數據源改變成LDAP數據源,只需改變控制器即可。一旦正確地實現了控制器,不管數據來自數據庫還是LDAP服務器,視圖都會正確地顯示它們。由於MVC模式的三個模塊相互獨立,改變其中一個不會影響其他兩個,所以依據這種設計思想能構造良好的少互擾性的構件。

  此外,控制器提高了應用程序的靈活性和可配置性。控制器可以用來連接不同的模型和視圖去完成用戶的需求,也可以構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據用戶的需求選擇適當的模型機型處理,然后選擇適當的的視圖將處理結果顯示給用戶。

【引用】:http://kb.cnblogs.com/page/100216/

2. MVC與Web Forms

1 Web Forms構建web相對容易,開發人員只需在一個可視化設計器中拖放控件,設置相關屬性即可,通過編寫代碼來響應事件,使得對於程序的邏輯操作非常直觀。但是,開發人員很難了解背后HTML是如何運行的,同時,如果沒有合理控制ViewState的話,頁面的尺寸將大大超過預期,使得頁面打開相當緩慢,隨着web應用的復雜化,不容易測試也是開發中面對的一個問題

2 MVC避免了Web Forms所帶來的復雜性,沒有數據回傳,沒有頁面中保存視圖狀態,開發者可以完全掌握頁面呈現的全過程,使用模型、視圖及控制器將web划分為不同的組件,有利於開發與設計的分離,也提高了程序的可維護性和擴展性,特別是利於應用程序的測試,可以比較容易的實施測試驅動開發。

3兩種開發技術並存。 MVC只是給開發者提供了開發web應用程序的一種選擇,而不是替代傳統的Web Forms,這兩種技術應用於不同的場合具有不同的優缺點

Web Forms MVC

當一個瀏覽器向服務器請求一個aspx頁面時的簡體步驟如下:

服務器會首先創建前台頁面aspx類的對象,當子類(aspx類)被創建時,父類(后台頁面CS類)也會順便被創建。

接着就會在前台頁面類中調用ProcessRequest方法(PR方法不是在前台頁面類中定義的,而是在Page類中定義的,

因為CS類繼承與page類,而aspx類又繼承與page類,所以PR方法相當於aspx類的爺爺類中定義的)。

在PR方法中調用BuildControlTree方法,把前台頁面所有的html控件和runat=server的控件轉成對應的控件對象並添加在前台頁面

類得Controls集合中(這里當前頁面即aspx頁面類是根節點),而且runat=server的控件對象會保存在后台CS類中的一個對應類型的變量中。

在PR方法中調用后台頁面CS類的Page_Load方法,這個方法中的代碼是程序員自己寫的。

 最后再PR方法中調用Render_Controls方法,來遍歷控件樹中每一個節點的Render_Controls方法,生成完整的html代碼

 把完整的html代碼返回給瀏覽器。

當用戶從瀏覽器輸入地址,發出頁面請求,到返回結果,一般經過以下步驟:

1當用戶輸入地址,發出請求時,實際上就是向控制器發出相關命令

2控制器接收用戶指令后,向模型請求獲得相關數據

3模型將對應的數據返回給控制器

4控制器將有關數據發送到指定視圖

5指定的視圖呈現指定的數據

  • 它支持通過 HTTP 保留狀態的事件模型,這有益於開發業務線 Web 應用程序。

     基於 Web 窗體的應用程序提供了在數百個服務器控件中受支持的許多事件。

  • 它使用頁面控制器模式向單個頁面添加功能。 

  • 它針對基於服務器的窗體使用視圖狀態,這使得管理狀態信息更加輕松。

  • 它非常適合想要利用大量組件快速開發應用程序的 Web 開發人員和設計人員的小型團隊。

  • 通常,對於應用程序開發而言,它比較簡單,這是因為組件(Page 類、控件等)緊密集成並且通常需要比 MVC 模型更少的代碼。

  • 通過將應用程序分為模型、視圖和控制器,化繁為簡的工作更加輕松。

  • 它不使用視圖狀態或基於服務器的窗體。 這使得 MVC 框架特別適合想要完全控制應用程序行為的開發人員。

  • 它使用一種通過單一控制器處理 Web 應用程序請求的前端控制器模式。 這使您可以設計一個支持豐富路由基礎結構的應用程序

  • 它為測試驅動的開發 (TDD) 提供了更好的支持。

  • 它非常適合大型開發人員團隊支持的 Web 應用程序,以及需要對應用程序行為進行極度控制的 Web 設計人員。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM