新聞中心
MVC是模型(Model)-視圖(View)-控制器(Controller)的縮寫(xiě),是一種比較常見(jiàn)的設計框架,是一種將代碼的功能進(jìn)行劃分的一種設計框架,一種軟件設計典范,用一種業(yè)務(wù)邏輯、數據、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶(hù)交互的同時(shí),不需要重新編寫(xiě)業(yè)務(wù)邏輯。MVC被獨特的發(fā)展起來(lái)用于映射傳統的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶(hù)界面的結構中。組成MVC的三個(gè)模式分別是組合模式、策咯模式、觀(guān)察者模式,MVC在軟件開(kāi)發(fā)中發(fā)揮的威力,最終離不開(kāi)這三個(gè)模式的默契配合。 那些崇尚設計模式無(wú)用論的程序員,請了解只要你們使用MVC,就離不開(kāi)設計模式。
組合模式只在視圖層活動(dòng), 視圖層的實(shí)現用的就是組合模式,當然,這里指的實(shí)現是底層的實(shí)現,是由編程框架廠(chǎng)商做的事情,用不著(zhù)普通程序員插手。
組合模式的類(lèi)層次結構是樹(shù)狀的, 而我們做Web時(shí)視圖層是html頁(yè)面,html的結構不正是樹(shù)狀的嗎,這其實(shí)就是一個(gè)組合模式的應用,只是瀏覽器廠(chǎng)商已經(jīng)把界面相關(guān)的工作幫我們做掉了,但它確確實(shí)實(shí)是我們應用MVC的其中一部分,只是我們感覺(jué)不到罷了,這也是我們覺(jué)得View是實(shí)現起來(lái)最簡(jiǎn)單最沒(méi)有歧義的一層的原因。
除網(wǎng)頁(yè)以外的其他用戶(hù)界面程序,如WPF、Android、ASP.NET等等都是使用樹(shù)狀結構來(lái)組織界面控件對象的,因為組合模式就是從界面設計的通用解決方案總提煉出來(lái)的。所以與其說(shuō)MVC選擇了組合模式,還不如說(shuō)組合模式是必定會(huì )存在MVC中的,因為只要涉及到用戶(hù)界面,組合模式就必定存。事實(shí)上即使不理解組合模式,也不影響程序員正確的使用MVC,組合模式本就存在于程序員接觸不到的位置。
然而,觀(guān)察者模式和策略模式就顯得比較重要,是實(shí)實(shí)在在MVC中接觸的到的部分。
觀(guān)察者模式有兩部分組成,被觀(guān)察的對象和觀(guān)察者,觀(guān)察者也被稱(chēng)為監聽(tīng)者。對應到MVC中,Model是被觀(guān)察的對象,View是觀(guān)察者,Model層一旦發(fā)生變化,View層即被通知更新。View層和Model層互相之間是持有引用的。 我們在開(kāi)發(fā)Web MVC程序時(shí),因為視圖層的html和Model層的業(yè)務(wù)邏輯之間隔了一個(gè)http,所以不能顯示的進(jìn)行關(guān)聯(lián),但是他們觀(guān)察者和收聽(tīng)者的關(guān)系卻沒(méi)有改變。當View通過(guò)http提交數據給服務(wù)器,服務(wù)器上的Model接受到數據執行某些操作,再通過(guò)http響應將結果回送給View,View(瀏覽器)接受到數據更新界面,這不正是一個(gè)接受到通知并執行更新的行為嗎,是觀(guān)察者模式的另一種表現形式。
但是,脫離Web,當通過(guò)代碼去純粹的表示一個(gè)MVC結構的時(shí)候,View和Model間無(wú)疑是觀(guān)察者和被觀(guān)察的關(guān)系,是以觀(guān)察者模式為理論基礎的。即使在Web中因為http壁壘的原因導致真正的實(shí)現有點(diǎn)走樣,但是原理核心和思路哲學(xué)卻是不變的。
最后是策略模式。策略模式是View和Controller之間的關(guān)系,Controller是View的一個(gè)策略,Controller對于View是可替換的, View和Controller的關(guān)系是一對多,在實(shí)際的開(kāi)發(fā)場(chǎng)景中,也經(jīng)常會(huì )碰到一個(gè)View被多個(gè)Controller引用,這即使策咯模式的一種體現,只是不那么直觀(guān)而已。
總結一下,關(guān)于MVC各層之間關(guān)系所對應的設計模式
View層,單獨實(shí)現了組合模式
Model層和View層,實(shí)現了觀(guān)察者模式
View層和Controller層,實(shí)現了策咯模式
MVC就是將這三個(gè)設計模式在一起使用,組合出的一套設計框架。
參考自https://blog.csdn.net/leehuimr/article/details/116298737 【Unity3D】MVC框架在Unity項目中的理解與使用
總部地址:山西省太原市長(cháng)治路227號(山西綜改示范區
學(xué)府園區高新國際大廈B座一層)