MVC 淺談

只要接觸MVC就勢必離不開說三層,很多人就會一直糾結於他們之間的區別,也難怪,他們之間有共同之處:都分爲三塊,不仔細琢磨好像說的都是一樣的東西,網上說法也是百家爭鳴。本文僅是介紹一下對MVC的理解,由於學習是一個逐步深入的過程,現在還未到深刻理解的程度,也沒必要非得區分出一個所以然來,也不敢對三層和MVC妄下評論,僅是記錄這個學習認知的過程,希望和大家一同交流,隨着時間的推移,自己的認識也在不斷的刷新。

========切入正題========


MVC模式(Model-View-Controller)由Trygve Reenskaug在1974年提出,是施樂帕羅奧多研究中心(Xerox PARC)在20世紀80年代爲程序語言Smalltalk發明的一種軟件設計模式。MVC模式的目的是實現一種動態的程式設計,使後續對程序的修改和擴展簡化,並且使程序某一部分的重複利用成爲可能。除此之外,此模式通過對複雜度的簡化,使程序結構更加直觀。
MVC的設計思想是即一個應用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成三個層——模型層、視圖層、控制層。

各個層的功能:

模型(Model):主要負責出來業務邏輯以及數據庫的交互。用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。“模型”有對數據直接訪問的權力,例如對數據庫的訪問。
視圖(View):主要用於顯示數據和提交數據。視圖層能夠實現數據有目的的顯示。在視圖中一般沒有程序上的邏輯。
控制器(Controller):主要是用作捕獲請求並控制請求轉發。起到不同層面間的組織作用,用於控制應用程序的流程。它處理事件並作出響應。“事件”包括用戶的行爲和數據模型上的改變。

三者之間的關係:


Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要Controller改變了Models的數據或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會從潛在的Model中獲取數據來刷新自己。

MVC的兩個分離:
Ⅰ:View和Model分離:Model關注內在的不可視的邏輯,而View關注外在的可視的邏輯。這樣能夠爲相同的Moudle開發不同的View進行展示,把可視與不可視分離開也可以使Modle相對獨立,耦合性降低,可以進行獨立測試。
Ⅱ:View和Controller分離:這個分離的重要性不是很大,因爲View和Controller往往是一一對應的關係。Controller對View是單向引用,這樣可以對Controller進行獨立測試。

MVC的發展:
我們平時最常說的是最早提出的MVC模式,也稱爲Classic MVC,具體演化參考(MVC演化歷史),不再贅述。

MVC的優點:

最重要的是有多個視圖對應一個模型的能力,使的軟件的健壯性和代碼的重用性得到了很大的提高;一個應用被分離爲三個層,有新的需求只需改變特定的層就可以滿足,也便於維護,有利於軟件工程化管理。

缺點:
(1)增加了系統結構和實現的複雜性。對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,使軟件的開發週期加長,並可能產生過多的更新操作,降低運行效率。
(2)視圖與控制器間的過於緊密的連接。視圖與控制器是相互分離,但確實聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
(3)視圖對模型數據的低效率訪問。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。
(4) 目前,一般高級的界面工具或構造器不支持MVC架構。改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,從而造成使用MVC的困難。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章