標籤:mvc架構 blog 構造器 使用者 介面 view 調用 串連 邏輯
MVC並不屬於GOF的23個設計模式之列,但是它在GOF的書中作為一個重要的例子被提出來,並給予了很高的評價。一般的來講,我們認為GOF的23個模式是一些中級的模式,在它下面還可以抽象出一些更為一般的底層的模式,在其上也可以通過組合得到一些進階的模式。MVC就可以看作是進行一些模式組合之後的結果。
MVC定義:即Model-View-Controller,把一個應用的輸入、處理、輸出資料流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成三個層,即模型層、視圖層、控制層。
MVC模式結構如下:
模型(Model):封裝的是資料來源和所有基於對這些資料的操作。在一個組件中,Model往往表示組件的狀態和操作狀態的方法。
視圖(View):封裝的是對資料來源Model的一種顯示。一個模型可以由多個視圖,而一個視圖理論上也可以同不同的模型關聯起來。
控制器(Control):封裝的是外界作用於模型的操作。通常,這些操作會轉寄到模型上,並調用模型中相應的一個或者多個方法。一般Controller在Model和View之間起到了溝通的作用,處理使用者在View上的輸入,並轉寄給Model。這樣Model和View兩者之間可以做到鬆散耦合,甚至可以彼此不知道對方,而由Controller串連起這兩個部分。
MVC應用程式總是由這三個部分組成。Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要Controller改變了Model的資料或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會從潛在的Model中擷取資料來重新整理自己。MVC模式最早是smalltalk語言研究團提出的,應用於使用者互動應用程式中。
MVC的兩個分離:
Ⅰ:View和Model分離:Model關注內在的不可視的邏輯,而View關注外在的可視的邏輯。這樣能夠為相同的Moudle開發不同的View進行展示,把可視與不可視分離開也可以使Modle相對獨立,耦合性降低,可以進行獨立測試。
Ⅱ:View和Controller分離:這個分離的重要性不是很大,因為View和Controller往往是一一對應的關係。Controller對View是單向引用,這樣可以對Controller進行獨立測試。
MVC的優點:
最重要的是有多個視圖對應一個模型的能力,使的軟體的健壯性和代碼的重用性得到了很大的提高;一個應用被分離為三個層,有新的需求只需改變特定的層就可以滿足,也便於維護,有利於軟體工程化管理。
缺點:
(1)增加了系統結構和實現的複雜性。對於簡單的介面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,使軟體的開發週期加長,並可能產生過多的更新操作,降低運行效率。
(2)視圖與控制器間的過於緊密的串連。視圖與控制器是相互分離,但確實聯絡緊密的組件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
(3)視圖對模型資料的低效率訪問。依據模型操作介面的不同,視圖可能需要多次調用才能獲得足夠的顯示資料。對未變化資料的不必要的頻繁訪問,也將損害操作效能。
(4) 目前,一般進階的介面工具或構造器不支援MVC架構。改造這些工具以適應MVC需要和建立分離的組件的代價是很高的,從而造成使用MVC的困難。
適用範圍:
將MVC運用到你的應用程式,會帶來額外的工作量,增加應用的複雜性,但對於開發存在大量使用者介面,並且商務邏輯複雜的大型應用程式,MVC將會使你的軟體在健壯性、代碼重用和結構方面上一個新的台階。儘管在最初構建MVC架構時會花費一定的工作量,但從長遠角度看,它會大大提高後期軟體開發的效率。
對MVC的理解