SpringMVC原理&MVC設計思想


 

什么是MVC?

      MVC是一種架構模式 --- 程序分層,分工合作,既相互獨立,又協同工作

      MVC是一種思考方式 --- 需要將什么信息展示給用戶? 如何布局? 調用哪些業務邏輯?

 

  MVC流程圖如下圖所示:

 MVC核心思想:業務數據抽取同業務數據實現相分離

 

總結:

    模型層(M)       業務數據的信息表示,關注支撐業務的信息構成,通常是多個業務實體的組合

    視圖層(V)       為用戶提供UI,重點關注數據的呈現

    控制器(C)       接受用戶請求,並調用相應的模型處理

                         (相當於一個總調配中心,有什么需求,就去調用相應模型進行處理,最后通過視圖給用戶進行展示)

 

SpringMVC的原理:

    1 首先用戶發出請求,請求到達SpringMVC的前端控制器(DispatcherServlet),

    2 前端控制器根據用戶的url,請求處理器映射器(HandlerMapping)查找匹配該url的handler,並返回一個執行鏈(HandlerExecutionChain),

    3 前端控制器再請求處理器適配器(HandlerAdapter)調用相應的handler進行處理並返回給前端控制器一modelAndView,  

    4 前端控制器再請求視圖解析器(ViewResolver)對返回的邏輯視圖進行解析,

    5 最后前端控制器將返回的視圖進行渲染並把數據裝入到request域,返回給用戶。

 

  注:DispatcherServlet作為springMVC的前端控制器,負責接收用戶的請求並根據用戶的請求返回相應的視圖給用戶(分發調度)

 

  補充:

    為什么叫前端控制器?前端又是什么?

   舉個例子:假如你去醫院看病,通過向分診台的醫院描述自己的病情,就可以得到醫生的指導具體去看外科、內科或者神經科等等,這里我們的分診台就扮演着前端控制器(Dispatcher)的角色,也叫做調度器,而各個科室就扮演着控制器(Controller)的角色,因為分診台是在具體各個科室之前,所以這個模式就叫做前端控制器。

 


 

MVC設計思想

  MVC英文即Model-View-Controller,即把一個應用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成三個層——模型層、視圖層、控制層。 

  視圖(View)代表用戶交互界面,對於Web應用來說,可以概括為HTML界面,但有可能為XHTML、XML和Applet。隨着應用的復雜性和規模性,界面的處理也變得具有挑戰性。一個應用可能有很多不同的視圖,MVC設計模式對於視圖的處理僅限於視圖上數據的采集和處理,以及用戶的請求,而不包括在視圖上的業務流程的處理。業務流程的處理交予模型(Model)處理。比如一個訂單的視圖只接受來自模型的數據並顯示給用戶,以及將用戶界面的輸入數據和請求傳遞給控制和模型。 

  模型(Model):就是業務流程/狀態的處理以及業務規則的制定。業務流程的處理過程對其它層來說是黑箱操作,模型接受視圖請求的數據,並返回最終的處理結果。業務模型的設計可以說是MVC最主要的核心。目前流行的EJB模型就是一個典型的應用例子,它從應用技術實現的角度對模型做了進一步的划分,以便充分利用現有的組件,但它不能作為應用設計模型的框架。它僅僅告訴你按這種模型設計就可以利用某些技術組件,從而減少了技術上的困難。對一個開發者來說,就可以專注於業務模型的設計。MVC設計模式告訴我們,把應用的模型按一定的規則抽取出來,抽取的層次很重要,這也是判斷開發人員是否優秀的設計依據。抽象與具體不能隔得太遠,也不能太近。MVC並沒有提供模型的設計方法,而只告訴你應該組織管理這些模型,以便於模型的重構和提高重用性。我們可以用對象編程來做比喻,MVC定義了一個頂級類,告訴它的子類你只能做這些,但沒法限制你能做這些。這點對編程的開發人員非常重要。 

  業務模型還有一個很重要的模型那就是數據模型。數據模型主要指實體對象的數據 保存(持續化)。比如將一張訂單保存到數據庫,從數據庫獲取訂單。我們可以將這個模型單獨列出,所有有關數據庫的操作只限制在該模型中。 

  控制(Controller)可以理解為從用戶接收請求, 將模型與視圖匹配在一起,共同完成用戶的請求。划分控制層的作用也很明顯,它清楚地告訴你,它就是一個分發器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請求。控制層並不做任何的數據處理。例如,用戶點擊一個連接,控制層接受請求后, 並不處理業務信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。因此,一個模型可能對應多個視圖,一個視圖可能對應多個模型。 

  MVC的優點

  大部分用過程語言比如ASP、PHP開發出來的Web應用,初始的開發模板就是混合層的數據編程。例如,直接向數據庫發送請求並用HTML顯示,開發速度往往比較快,但由於數據頁面的分離不是很直接,因而很難體現出業務模型的樣子或者模型的重用性。產品設計彈性力度很小,很難滿足用戶的變化性需求。MVC要求對應用分層,雖然要花費額外的工作,但產品的結構清晰,產品的應用通過模型可以得到更好地體現。 

  首先,最重要的是應該有多個視圖對應一個模型的能力。在目前用戶需求的快速變化下,可能有多種方式訪問應用的要求。例如,訂單模型可能有本系統的訂單,也有網上訂單,或者其他系統的訂單,但對於訂單的處理都是一樣,也就是說訂單的處理是一致的。按MVC設計模式,一個訂單模型以及多個視圖即可解決問題。這樣減少了代碼的復制,即減少了代碼的維護量,一旦模型發生改變,也易於維護。 其次,由於模型返回的數據不帶任何顯示格式,因而這些模型也可直接應用於接口的使用。 

  再次,由於一個應用被分離為三層,因此有時改變其中的一層就能滿足應用的改變。一個應用的業務流程或者業務規則的改變只需改動MVC的模型層。 

  控制層的概念也很有效,由於它把不同的模型和不同的視圖組合在一起完成不同的請求,因此,控制層可以說是包含了用戶請求權限的概念。 

  最后,它還有利於軟件工程化管理。由於不同的層各司其職,每一層不同的應用具有某些相同的特征,有利於通過工程化、工具化產生管理程序代碼。

  思想:

  MVC應用程序總是由三個部分組成.Event(事件)導致Controller改變Model或View,或者同時改變兩者.只要Controller改變了Models的數據或者屬性,所有依賴的View都會自動更新.類似的,只要Controller改變了View,View會從潛在的Model中獲取數據來刷新自己 。

  MVC模式是一個復雜的架構模式,其實現也顯得非常復雜,但多種設計模式結合在一起,使MVC模式的實現變得相對簡單易行.Views可以看作一棵樹,顯然可以用Composite Pattern來實現.Views和Models之間的關系可以用Observer Pattern體現.Controller控制Views的顯示,可以用Strategy Pattern實現.Model通常是一個調停者,可采用Mediator Pattern來實現.

 

 
 

 


免責聲明!

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



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