MVVM設(shè)計(jì)模式

MVVM的發(fā)展歷程:MVC-->MVP-->MVVM。

MVVM是Model-View-ViewModel的簡(jiǎn)寫绞蹦。微軟的WPF帶來了新的技術(shù)體驗(yàn)力奋,如Silverlight、音頻幽七、視頻景殷、3D、動(dòng)畫……澡屡,這導(dǎo)致了軟件UI層更加細(xì)節(jié)化猿挚、可定制化。同時(shí)驶鹉,在技術(shù)層面绩蜻,WPF也帶來了 諸如Binding、Dependency Property室埋、Routed Events办绝、Command、DataTemplate词顾、ControlTemplate等新特性八秃。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結(jié)合的應(yīng)用方式時(shí)發(fā)展演變過來的一種新型架構(gòu)框架。它立足于原有MVP框架并且把WPF的新特性糅合進(jìn)去肉盹,以應(yīng)對(duì)客戶日益復(fù)雜的需求變化昔驱。

因?yàn)閃PF技術(shù)出現(xiàn),從而使MVP設(shè)計(jì)模式有所改進(jìn)上忍,MVVM 模式便是使用的是數(shù)據(jù)綁定基礎(chǔ)架構(gòu)骤肛。它們可以輕松構(gòu)建UI的必要元素。

View綁定到ViewModel窍蓝,然后執(zhí)行一些命令在向它請(qǐng)求一個(gè)動(dòng)作腋颠。而反過來,ViewModel跟Model通訊吓笙,告訴它更新來響應(yīng)UI淑玫。這樣便使得為應(yīng)用構(gòu)建UI非常的容易。往一個(gè)應(yīng)用程序上貼一個(gè)界面越容易面睛,外觀設(shè)計(jì)師就越容易使用Blend來創(chuàng)建一個(gè)漂亮的界面絮蒿。同時(shí),當(dāng)UI和功能越來越松耦合的時(shí)候叁鉴,功能的可測(cè)試性就越來越強(qiáng)土涝。

在MVP模式中,為了讓UI層能夠從邏輯層上分離下來幌墓,設(shè)計(jì)師們?cè)赨I層與邏輯層之間加了一層interface但壮。無論是UI開發(fā)人員還是數(shù)據(jù)開發(fā)人員冀泻,都要尊重這個(gè)契約、按照它進(jìn)行設(shè)計(jì)和開發(fā)蜡饵。這樣弹渔,理想狀態(tài)下無論是Web UI還是Window UI就都可以使用同一套數(shù)據(jù)邏輯了。借鑒MVP的IView層验残,養(yǎng)成習(xí)慣捞附。View Model聽起來比Presenter要貼切得多;會(huì)把一些跟事件您没、命令相關(guān)的東西放在MVC的'C',或者是MVVM的'Vm'。

優(yōu)點(diǎn):

MVVM模式和MVC模式一樣胆绊,主要目的是分離視圖(View)和模型(Model)氨鹏,有幾大優(yōu)點(diǎn)

1. 低耦合。視圖(View)可以獨(dú)立于Model變化和修改压状,一個(gè)ViewModel可以綁定到不同的"View"上仆抵,當(dāng)View變化的時(shí)候Model可以不變,當(dāng)Model變化的時(shí)候View也可以不變种冬。

2. 可重用性镣丑。你可以把一些視圖邏輯放在一個(gè)ViewModel里面,讓很多view重用這段視圖邏輯娱两。

3. 獨(dú)立開發(fā)莺匠。開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel),設(shè)計(jì)人員可以專注于頁面設(shè)計(jì)十兢,使用Expression Blend可以很容易設(shè)計(jì)界面并生成xaml代碼趣竣。

4. 可測(cè)試。界面素來是比較難于測(cè)試的旱物,而現(xiàn)在測(cè)試可以針對(duì)ViewModel來寫遥缕。

解析:

WPF的數(shù)據(jù)綁定與Presentation Model相結(jié)合是非常好的做法,使得開發(fā)人員可以將


MVVM 功能圖

View和邏輯分離出來,但這種數(shù)據(jù)綁定技術(shù)非常簡(jiǎn)單實(shí)用,也是WPF所特有的宵呛,所以我們又稱之為Model-View-ViewModel(MVVM)单匣。這種模式跟經(jīng)典的MVP(Model-View-Presenter)模式很相似,除了你需要一個(gè)為View量身定制的model宝穗,這個(gè)model就是ViewModel户秤。ViewModel包含所有由UI特定的接口和屬性,并由一個(gè) ViewModel 的視圖的綁定屬性讽营,并可獲得二者之間的松散耦合虎忌,所以需要在ViewModel 直接更新視圖中編寫相應(yīng)代碼。數(shù)據(jù)綁定系統(tǒng)還支持提供了標(biāo)準(zhǔn)化的方式傳輸?shù)揭晥D的驗(yàn)證錯(cuò)誤的輸入的驗(yàn)證橱鹏。

在視圖(View)部分膜蠢,通常也就是一個(gè)Aspx頁面堪藐。在以前設(shè)計(jì)模式中由于沒有清晰的職責(zé)劃分,UI 層經(jīng)常成為邏輯層的全能代理挑围,而后者實(shí)際上屬于應(yīng)用程序的其他層礁竞。MVP 里的M 其實(shí)和MVC里的M是一個(gè),都是封裝了核心數(shù)據(jù)杉辙、邏輯和功能的計(jì)算關(guān)系的模型模捂,而V是視圖(窗體),P就是封裝了窗體中的所有操作蜘矢、響應(yīng)用戶的輸入輸出狂男、事件等,與MVC里的C差不多品腹,區(qū)別是MVC是系統(tǒng)級(jí)架構(gòu)的岖食,而MVP是用在某個(gè)特定頁面上的,也就是說MVP的靈活性要遠(yuǎn)遠(yuǎn)大于MVC舞吭,實(shí)現(xiàn)起來也極為簡(jiǎn)單泡垃。

我們?cè)購腎View這個(gè)interface層來解析,它可以幫助我們把各類UI與邏輯層解耦羡鸥,同時(shí)可以從UI層進(jìn)入自動(dòng)化測(cè)試(Unit/Automatic Test)并提供了入口蔑穴,在以前可以由WinForm/Web Form/MFC等編寫的UI是通過事件Windows消息與IView層溝通的。WPF與IView層的溝通惧浴,最佳的手段是使用Binding存和,當(dāng)然,也可以使用事件赶舆;Presenter層要實(shí)現(xiàn)IView哑姚,多態(tài)機(jī)制可以保證運(yùn)行時(shí)UI層顯示恰當(dāng)?shù)臄?shù)據(jù)。比如Binding芜茵,在程序中叙量,你可能看到Binding的Source是某個(gè)interface類型的變量,實(shí)際上九串,這個(gè)interface變量引用著的對(duì)象才是真正的數(shù)據(jù)源绞佩。

MVC模式大家都已經(jīng)非常熟悉了,在這里我就不贅述猪钮,這些模式也是依次進(jìn)化而形成MVC—>MVP—>MVVM品山。有一句話說的好:當(dāng)物體受到接力的時(shí)候,凡是有界面的地方就是最容易被撕下來的地方烤低。因此肘交,IView作為公共視圖接口約束(契約)的一層意思;View則能傳達(dá)解耦的一層意思扑馁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涯呻,一起剝皮案震驚了整個(gè)濱河市凉驻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌复罐,老刑警劉巖涝登,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異效诅,居然都是意外死亡胀滚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門乱投,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咽笼,“玉大人,你說我怎么就攤上這事戚炫『趾桑” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵嘹悼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我层宫,道長(zhǎng)杨伙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任萌腿,我火速辦了婚禮限匣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毁菱。我一直安慰自己米死,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布贮庞。 她就那樣靜靜地躺著峦筒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窗慎。 梳的紋絲不亂的頭發(fā)上物喷,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音遮斥,去河邊找鬼峦失。 笑死,一個(gè)胖子當(dāng)著我的面吹牛术吗,可吹牛的內(nèi)容都是我干的尉辑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼较屿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼隧魄!你這毒婦竟也來了卓练?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤堤器,失蹤者是張志新(化名)和其女友劉穎昆庇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闸溃,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡整吆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辉川。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片表蝙。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖乓旗,靈堂內(nèi)的尸體忽然破棺而出府蛇,到底是詐尸還是另有隱情,我是刑警寧澤屿愚,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布汇跨,位于F島的核電站,受9級(jí)特大地震影響妆距,放射性物質(zhì)發(fā)生泄漏穷遂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一娱据、第九天 我趴在偏房一處隱蔽的房頂上張望蚪黑。 院中可真熱鬧,春花似錦中剩、人聲如沸忌穿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掠剑。三九已至,卻和暖如春妆棒,著一層夾襖步出監(jiān)牢的瞬間澡腾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工糕珊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留动分,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓红选,卻偏偏與公主長(zhǎng)得像澜公,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容