同
如果把這三者放在一起比較,先說一下三者的共同點(diǎn),也就是Model和View:
Model:數(shù)據(jù)對(duì)象,同時(shí),提供本應(yīng)用外部對(duì)應(yīng)用程序數(shù)據(jù)的操作的接口,也可能在數(shù)據(jù)變化時(shí)發(fā)出變更通知。Model不依賴于View的實(shí)現(xiàn),只要外部程序調(diào)用Model的接口就能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的增刪改查。
View:UI層,提供對(duì)最終用戶的交互操作功能,包括UI展現(xiàn)代碼及一些相關(guān)的界面邏輯代碼。
異
三者的差異在于如何粘合View和Model,實(shí)現(xiàn)用戶的交互操作以及變更通知
Controller接收View的操作事件,根據(jù)事件不同,或者調(diào)用Model的接口進(jìn)行數(shù)據(jù)操作,或者進(jìn)行View的跳轉(zhuǎn),從而也意味著一個(gè)Controller可以對(duì)應(yīng)多個(gè)View。Controller對(duì)View的實(shí)現(xiàn)不太關(guān)心,只會(huì)被動(dòng)地接收,Model的數(shù)據(jù)變更不通過Controller直接通知View,通常View采用觀察者模式監(jiān)聽Model的變化。
Presenter與Controller一樣,接收View的命令,對(duì)Model進(jìn)行操作;與Controller不同的是Presenter會(huì)反作用于View,Model的變更通知首先被Presenter獲得,然后Presenter再去更新View。一個(gè)Presenter只對(duì)應(yīng)于一個(gè)View。根據(jù)Presenter和View對(duì)邏輯代碼分擔(dān)的程度不同,這種模式又有兩種情況:Passive View和Supervisor Controller。
注意這里的“Model”指的是View的Model,跟MVVM中的一個(gè)Model不是一回事。所謂View的Model就是包含View的一些數(shù)據(jù)屬性和操作的這么一個(gè)東東,這種模式的關(guān)鍵技術(shù)就是數(shù)據(jù)綁定(data binding),View的變化會(huì)直接影響ViewModel,ViewModel的變化或者內(nèi)容也會(huì)直接體現(xiàn)在View上。這種模式實(shí)際上是框架替應(yīng)用開發(fā)者做了一些工作,開發(fā)者只需要較少的代碼就能實(shí)現(xiàn)比較復(fù)雜的交互。
---------------------------------------------------------
專注移動(dòng)開發(fā)
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2017-05-10 11:03
TiGERTiAN 閱讀(427)
評(píng)論(0) 編輯 收藏