MVP架構(gòu)模式

一、MVP模式圖示

MVP 模式將 MVC中的controller 改名為 Presenter,同時改變了通信方向。

特點 :

(1)各部分之間的通信,都是雙向的。

(2)View 與 Model 不發(fā)生聯(lián)系,都通過 Presenter 傳遞。

(3) View 非常薄,不部署任何業(yè)務(wù)邏輯,稱為”被動視圖”(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那里。

M:model層

V:? 視圖層

P:? 協(xié)議層(protocol)

二、MVP在iOS中的運用

首先,MVP基于面向協(xié)議(protocol)的設(shè)計模式。這就意味在工程里面,你需要定義多個協(xié)議文件,但是,我們都知道定制一個協(xié)議,可能會遵循一些屬性或者可選實現(xiàn)必選實現(xiàn)的方法,當(dāng)P層(controller)遵循這個協(xié)議,需要設(shè)置代理,由這個代理對象去實現(xiàn)被代理執(zhí)行的工作。然而,在ios開發(fā)中,能用協(xié)議實現(xiàn)的,我們大部分都用塊直接去回調(diào)執(zhí)行,增強(qiáng)代碼的可閱讀性和緊湊性。

MVP模式的原則是,在service層提供一大堆不盡相同的業(yè)務(wù)場景之后,我們將這一系列數(shù)據(jù)全部抽象歸納,通過定制一套標(biāo)準(zhǔn)的protocol協(xié)議,讓不同業(yè)務(wù)場景的都去實現(xiàn)這一協(xié)議,最終將數(shù)據(jù)全部裝配、拼裝成一套具有相同調(diào)度規(guī)則的統(tǒng)一編制話數(shù)據(jù)Model,之后我們采用id的標(biāo)準(zhǔn)去操作數(shù)據(jù)。

MVP除了將數(shù)據(jù)邏輯完全鎮(zhèn)封的各自的Model,同時將那些Model需要繪制,哪些Model需要校驗,

哪些Model需要接受處理點擊Action這些邏輯全部由Model自己來決定,Controller只作為一個粘合性的模版,Controller只處理一批具有共性的范型類數(shù)據(jù),至于具體的操作操作毫不關(guān)心。

MVP面相的更多的是在MVC上層與service之間追加了一層協(xié)議層,我們認(rèn)為通過協(xié)議層處理過的數(shù)據(jù)是暫時可以客戶端場景使用的數(shù)據(jù),在數(shù)據(jù)到達(dá)MVC我們針對數(shù)據(jù)進(jìn)行再加工、再構(gòu)造處理,這一切全部在容器內(nèi)操作。這一點完全與別的設(shè)計模式相反。

MVP并不是讓用戶在Model打上網(wǎng)絡(luò)請求操作、在Model層執(zhí)行[self.navigationController pushViewController:*]等這些操作,其實相對大多人來說對于部分對象生命周期長短問題還是很在乎,所以在處理TemplateActionProtocol協(xié)議的時間,MVP只是對準(zhǔn)Action做了一層抽象封裝。通過實現(xiàn)TemplateActionProtocol的Model會產(chǎn)生一個Action對象,最終通過block的調(diào)用鏈傳回控制器中,我們在控制器中統(tǒng)一做handler處理。

MVP最初設(shè)計目的就是為了強(qiáng)調(diào)一個裝配概念,如果發(fā)生了業(yè)務(wù)場景的追加,控制器我不會改動其中的代碼,只需要將新數(shù)據(jù)追加成相同批次的ViewModel,然后配置進(jìn)容器,之后控制器不做任何修改就可以滿足需求了。通過具體的剝離、抽取我們成功了的最大限度的剝離了控制器,滿足了輕量級Controller這一概念

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MVC 為了將數(shù)據(jù)模式和視圖分離開來,并以控制器作為連接兩者的橋梁以實現(xiàn)解耦。 MVC是一種框架模式而非設(shè)計模式,...
    官先生Y閱讀 706評論 0 0
  • 一.為什么需要軟件設(shè)計模式? 我們先來定義什么是好的軟件架構(gòu): 軟件架構(gòu)上具有明確的分工,各個模塊的功能職責(zé)平衡分...
    Altima閱讀 63,878評論 15 26
  • 我們平時開發(fā)都使用的是MVC模式,也就是模型-視圖-控制器,隨著業(yè)務(wù)邏輯越來越復(fù)雜,Activity類一方面要負(fù)責(zé)...
    SunYo閱讀 838評論 0 0
  • 前言 看了下上篇博客的發(fā)表時間到這篇博客,竟然過了11個月,罪過,罪過。這一年時間也是夠折騰的,年初離職跳槽到鵝廠...
    西木柚子閱讀 21,412評論 12 183
  • 今天晚上阿康突然發(fā)來一句,高一你收到情書時是什么感覺?我一時記不起高一時收到的情書,我好像沒收到過。他卻說,...
    阿雙啊閱讀 476評論 0 0

友情鏈接更多精彩內(nèi)容