MVC架構模式詳細說明

1、簡介:前端

  架構模式是一個通用的、可重用的解決方案,用於在給定上下文中的軟件體系結構中常常出現的問題。架構模式與軟件設計模式相似,但具備更普遍的範圍。react

  模型-視圖-控制器模式,也稱爲MVC模式(Model View Controller)。用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。它把軟件系統分爲三個基本部分:angularjs

    模型(Model):負責存儲系統的中心數據。web

    視圖(View):將信息顯示給用戶(能夠定義多個視圖)。數據庫

    控制器(Controller):處理用戶輸入的信息。負責從視圖讀取數據,控制用戶輸入,並向模型發送數據,是應用程序中處理用戶交互的部分。負責管理與用戶交互交互控制。設計模式

  視圖和控制器共同構成了用戶接口。服務器

  且每一個視圖都有一個相關的控制器組件。控制器接受輸入,一般做爲將鼠標移動、鼠標按鈕的活動或鍵盤輸入編碼的時間。時間被翻譯成模型或試圖的服務器請求。用戶僅僅經過控制器與系統交互。架構

 

2、結構app

  模型組件包含應用程序的功能內核,他封裝了相應的數據並輸出執行特定應用程序處理的過程;模型也提供訪問數據的函數,這些數據有得到待顯示的數據的視圖組件使用。框架

  控制器表明用戶調用全部這些過程。

3、目的

  實現一種動態的程序設計,是後序對程序的修改和擴展簡化,而且使程序某一部分的重複利用稱爲可能。

  經過對複雜度的簡化,使程序結構更加直觀。

  將信息的內部表示與信息的呈現方式分離開來,並接受用戶的請求。它分離了組件,並容許有效的代碼重用。即,將模型和視圖的實現代碼分離,從而使同一個程序可使用不一樣的表現形式。好比一批統計數據你能夠分別用柱狀圖、餅圖來表示。C存在的目的則是確保模型和視圖的同步,一旦模型改變,視圖應該同步更新。

4、特色

  MVC重要特色就是兩種分離:

  視圖和數據模型的分離:使用不一樣的視圖對相同的數據進行展現;分離可視和不可視的組件,可以對模型進行獨立測試。由於分離了可視組件減小了外部依賴利於測試。(數據庫也是一種外部組件)

  視圖和表現邏輯(Controller)的分離:Controller是一個表現邏輯的組件,並不是一個業務邏輯組件。MVC能夠做爲表現模式也能夠做爲建構模式,意味這Controller也能夠是業務邏輯。分離邏輯和具體展現,可以對邏輯進行獨立測試。

  優勢:耦合性低;重用性高;生命週期成本低;部署塊;可維護性高;有利軟件工程化管理。

  缺點:沒有明確的定義;不適合小型,中等規模的應用程序;增長系統結構和實現的複用性;視圖與控制器間的過於緊密的鏈接;視圖對模型數據的低效率訪問;通常高級的界面工具或構造器不支持模式。

5、特定環境

  大的項目;須要劃分模塊的項目。

6、解決的問題

  由於在PHP還不支持面向對象以前,是過程化的方式來建立的,它們將 Model View Controller 三層的代碼混在一塊兒,十分混亂。因此它解決的問題有:維護難,開發速度慢,二次開發難度高,工做量大,代碼複用,耦合度高,系統不靈活。

7、解決方案

  以個人理解,將項目模塊化,分爲三個部分:模型,視圖和控制器三個部分。模型是應用對象,沒有用戶界面。視圖表示它在屏幕上的顯示,表明流向用戶的數據。控制器定義用戶界面對用戶輸入的響應方式,負責把用戶的動做轉成針對Model的操做。Model 經過更新View的數據來反映數據的變化。

8、實例

  應用於基於MVC架構模式的框架,常見的服務器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常見前端MVC框架:angularjs、reactjs、backbone;由MVC演化出了另一些模式如:MVP、MVVM。

  這裏咱們舉例Spring MVC:

  Spring MVC是Spring提供的一個強大而靈活的web框架。藉助於註解,Spring MVC提供了幾乎是POJO的開發模式,使得控制器的開發和測試更加簡單。這些控制器通常不直接處理請求,而是將其委託給Spring上下文中的其餘bean,經過Spring的依賴注入功能,這些bean被注入到控制器中。Spring MVC主要由DispatcherServlet、處理器映射、處理器(控制器)、視圖解析器、視圖組成。他的兩個核心是兩個核心:

  處理器映射:選擇使用哪一個控制器來處理請求
  視圖解析器:選擇結果應該如何渲染

  經過以上兩點,Spring MVC保證瞭如何選擇控制處理請求和如何選擇視圖展示輸出之間的鬆耦合。

  運行原理如圖所示:

(1)Http請求:客戶端請求提交到DispatcherServlet。
(2)尋找處理器:由DispatcherServlet控制器查詢一個或多個HandlerMapping,找處處理請求的Controller。
(3)調用處理器:DispatcherServlet將請求提交到Controller。
(4)(5)調用業務處理和返回結果:Controller調用業務邏輯處理後,返回ModelAndView。
(6)(7)處理視圖映射並返回模型: DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖。
(8) Http響應:視圖負責將結果顯示到客戶端。

 

 Spring MVC框架與MVC架構模式聯繫在於:

  SpringMVC中並無涉及有關於Controller接口規範的實現,SpringMVC是經過調用Handler來實現Controller這一層的。

  SpringMVC使用了適配器模式,前端控制器使用HandlerAdapter來調用不一樣的Controller,而後纔是Controller調用Model產生數據模型;
  產生的數據模型將會再次返回到前端控制器,並由前端控制器決定使用不一樣的模板引擎將頁面進行渲染。

9、MVC架構模式與分層模式的區別

  MVC模式屬於設計模式的範疇,就如同其餘設計模式同樣,模式的出現就是爲了對某種功能的優化,而MVC模式能夠看作是對三層架構中表現層的一種細分優化。以個人理解,MVC模式就是分層模式中表示層最經常使用的架構模式。

  詳細闡述以下:

  嚴格說這三個加起來之後纔是三層架構中的表現層,也就是說,MVC把三層架構中的UI層再度進行了分化,分紅了控制器、視圖、實體三個部分,控制器完成頁面邏輯,經過實體來與界面層完成通話;而C層直接與三層中的業務邏輯層進行對話。三層和MVC能夠共存。 三層是基於業務邏輯來分的,而MVC是基於頁面來分的。

  三層架構的分層模式是典型的上下關係,上層依賴於下層。但MVC做爲表現模式是不存在上下關係的,而是相互協做關係。即便將MVC看成架構模式,也不是分層模式。MVC和三層架構基本沒有可比性,是應用於不一樣領域的技術。

10、MVC架構模式與MVC框架的區別

  MVC框架,強制性的使應用程序輸入、處理和輸出分開。使用MVC應用程序被分紅三個核心部件:模型、視圖、控制器。它們各自處理本身的任務。其所使用的三個核心部件都是來時MVC模式的。只不過在框架中讓他們彼此更加獨立了去處理各自的任務而已。最典型的MVC就是JSP+SERVLET+JAVABEAN模式。

  MCV框架中:

  視圖:視圖是用戶看到並與之交互的界面,視圖的主要有元素HTML,Adobe Flash,XHTML,XML/XSL,WML等一些標識語言和Web services。

  模型:模型數據和業務規則。

  控制器:控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求,因此當單擊Web頁面中的超連接和發送HTML表單時,控制器自己不輸出任何東西和作任何處理。它只是接收請求並決定  調用哪一個模型構件去處理請求,而後再肯定用哪一個視圖來顯示返回的數據。

11、MVC架構模式的舉例說明

  例如①,小時候玩的那種卡帶式遊戲機,Control是主機,通常來講我買一個主機就好了,只要他不壞,他就能一直讓我玩這一類的遊戲。View則是電視機和遊戲手柄,電視機能夠獨立工做,他無論輸入的是電視信號、影碟機信號仍是遊戲機信號,他只管顯示,並且他決定了咱們看到的效果是怎麼樣的,若是我想要個尺寸更大的或者彩色的顯示效果,我只須要買個相應的電視機就好了,手柄也是能夠換的,遙杆仍是帶震動的。Model則是遊戲卡帶,他決定了我玩的是什麼遊戲,是魂鬥羅仍是超級瑪莉,並且遊戲機主機和電視機生產廠家永遠也不知道在上面有可能會運行什麼樣的遊戲。卡帶中可能會有遊戲代碼和存儲單元,都根據遊戲的須要而設計。

  例如②,一個採用比例表示的用於政治選舉的一個簡單信息系統,它提供了一個輸入數據的電子數據表和表示當前結果的幾種圖標。用戶能夠經過圖形接口與系統交互。全部信息顯示必須當即反應出選舉數據的變化。(引用自《面向模式的軟件體系結構-卷1 模式系統》)

  即,一旦模型的數據發生了變化,模型要通報全部的視圖。

相關文章
相關標籤/搜索