iOS巔峯之MVC(設計模式)詳解

MVC(Model-View-Controller,模型-視圖-控制器)是軟件工程中的一種軟件架構模式,它把軟件系統分爲三個基本部分:模型(Model)、視圖(View)、控制器(Controller)。

MVC不是一種設計模式(Design Pattern),而是一種架構模式(Architectural Pattern),用以描述應用程序的結構以及結構中各部分的職責和交互方式。它最先是在1979年的時候第一次被人提出,不過,當時環境有些不同,網絡應用的概念在當時還不存在。

提姆·伯納斯李(Tim Berners-Lee)在上世紀九十年代初期的時候播種下了萬維網(WWW)的種子,並永遠的改變了世界。目前我們在網絡開發中所採用的這種模式實際上是原版模式的一個改編版。這種架構模式的瘋狂流行是由於兩個極其流行的開發框架將這種模式包含了進來,它們是:Struts 和 Ruby on Rails。這兩個開發框架給稍後誕生的數百框架打上了深深的烙印。


1、 MVC 三層架構

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

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

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


  • 控制器Controller)- 負責轉發請求,對請求進行處理。
  • 視圖View)   - 界面設計人員進行圖形界面設計。
  • 模型Model) - 程序員編寫程序應有的功能(實現算法等)、數據庫專家進行數據管理和數據庫設計(可以實現具體的功能)。


2、MVC原理

MVC(模型-視圖-控制器)架構模式背後的思想非常簡單,我們的應用程序中必須區分下面這些職責:



應用程序被分成了三個主要的部分,每個部分負責掌管不同的任務。



3、MVC模式的網絡應用

控制器(Controller)

控制器掌管着用戶的請求(當用戶點擊圖形用戶界面(GUI)上的元素執行操作時,控制器會收到HTTP GET或者POST請求)。它的主要功能就是調用並協調需要的資源/對象來執行用戶請求。通常控制器會爲任務調用合適的模型,以及選擇合適的視圖。

模型(Model)

模型是指運用於數據之上的數據規則和數據內容,它一般對應於應用程序所要管理的對象。在軟件系統中,任何事物都可以被抽象成可以對其以某種方式進行處理的數據模型。應用程序中的用戶,信息以及圖書是什麼?它們只是一堆必須按照對應規則處理的數據(日期不能是未來的日期,電子郵件有特定的格式,名字的長度不能超過多少字符等等)。


模型給控制器提供了一個用戶請求內容對應的數據表達(比如信息,書,相冊)。不管我們如何向用戶展示,這個數據模型都不會變。這也是我們爲什麼可以隨意選擇使用哪個視圖來展示數據的原因。模型包含我們應用程序邏輯中最重要的組成部分,這些邏輯運用於我們要處理的問題過程中。控制器更多的是包含應用程序自身的內部組織邏輯。


視圖(View)

視圖提供了展示模型數據的不同方式。它可能是數據填充的模板。視圖可以有多個,而控制器則決定使用哪個視圖。一個網絡應用通常由許多控制器,模型和視圖組成。控制器可以被看成是一個主控制器,用於接收用戶的所有請求,然後在調用特定的控制器來處理不同的情況。



4、MVC 優點

MVC的一個最明顯好處就是它將視圖展示和應用邏輯清晰的分離開來。

對不同用戶以及不同設備類型的支持一直是當下的一個常見問題,例如:

來自臺式電腦和手機的請求所得到的視圖應該是不相同的,模型會返回完全相同的數據,但是不同的地方是控制器會選擇使用的視圖文件來展示數據(我們可以把它看作是不同的模板)。

除了將視圖從業務邏輯中分離開外,MVC的分離也降低了大型應用設計的難度,代碼也更具結構性,因此也更容易維護,測試和重用。



5、MVC 適用場景

MVC模式的缺點是由於它沒有明確的定義,所以完全理解MVC模式並不是很容易。使用MVC模式需要精心的計劃,由於它的內部原理比較複雜,所以需要花費一些時間去思考。開發一個MVC模式架構的工程,將不得不花費相當可觀的時間去考慮如何將MVC模式運用到應用程序中,同時由於模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。另外由於MVC模式將一個應用程序分成了三個部件,所以這意味着同一個工程將包含比以前更多的文件。
過去MVC模式並不適合小型甚至中等規模的應用程序,這樣會帶來額外的工作量,增加應用的複雜性。但現在多數軟體設計框架,能直接快速提供MVC骨架,供中小型應用程序開發,此問題不再存在。對於開發存在大量用戶界面,並且邏輯複雜的大型應用程序,MVC將會使軟件在健壯性、代碼重用和結構方面上一個新的臺階。儘管在最初構建MVC模式框架時會花費一定的工作量,但從長遠的角度來看,它會大大提高後期軟件開發的效率。




發佈了64 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章