MVC, MVP架構(gòu) - 實(shí)際案例總結(jié)

基本上所有app的本質(zhì)說到底都是從網(wǎng)絡(luò)上獲取數(shù)據(jù), 然后在View上顯示給用戶.

下面這張圖是一個(gè)概括性的對(duì)比架構(gòu)圖:


mvp_mvc.jpg
MVC 架構(gòu)的代碼

現(xiàn)在大多數(shù)的app架構(gòu)采用的是MVC架構(gòu), Model(數(shù)據(jù)), View, Controler.
android的Activity在MVC架構(gòu)上就充當(dāng)了Controler的角色, 但作為用戶界面, 一定程度上也具有一定的View的角色.
MVC的開發(fā)模式, 典型的代碼結(jié)構(gòu)是在Activity類中調(diào)用model層來加載網(wǎng)絡(luò)數(shù)據(jù), 然后把原數(shù)據(jù)進(jìn)行加工處理, 接下來設(shè)置給適當(dāng)?shù)腣iew展示給用戶。

這種模式下, 會(huì)出現(xiàn)2個(gè)問題.
一是, 會(huì)導(dǎo)致Activity類的代碼多于龐大, 經(jīng)常出現(xiàn)上千行的代碼, 代碼分析起來過于復(fù)雜. Activity作為Controler, 又作為View, 承擔(dān)了過多的職責(zé), 違背了"單一職責(zé)"的設(shè)計(jì)原則.
二是, 把Activity作為View來看, View和Model數(shù)據(jù)之間相互引用, 耦合性強(qiáng), 無法實(shí)現(xiàn)2個(gè)模塊間的解藕.

MVP 架構(gòu)的代碼

Model --- View --- Presenter
在MVP架構(gòu)下, android的Activity類就只單純的承擔(dān)View的角色, 在Activity類中不做任何的數(shù)據(jù)處理, 當(dāng)然也沒有model數(shù)據(jù)層的引用, 只負(fù)責(zé)展示UI的工作. 職能單一, 符合"單一職責(zé)"的設(shè)計(jì)原則.
Activity對(duì)外提供的功能通過一個(gè)IActivity接口聲明, Activity和Presenter之間相互引用. Activity直接引用Presenter的對(duì)象, Presenter中以IActivity接口的形式引用Activity的對(duì)象.
在Presenter中引用Model的對(duì)象, 執(zhí)行數(shù)據(jù)的訪問.
通過以上的架構(gòu)可以看到, 作為單純View角色的Activity和Model之間不存在引用關(guān)系, 兩者實(shí)現(xiàn)了解藕. 更關(guān)鍵的是Activity只負(fù)責(zé)展示UI的工作, 代碼簡潔, 不會(huì)再出現(xiàn)上千行代碼的情況.

此外, 把Acitivity抽象為某個(gè)接口還有一個(gè)好處是, 這個(gè)Activity能做哪些ui操作就一目了然了.

一個(gè)最簡單的辨別方法

拿到一份新代碼, 如果Activity類的代碼行數(shù)超過幾百行, 那基本就是采用傳統(tǒng)上的MVC架構(gòu), 如果Activity的代碼很簡潔, Activity實(shí)現(xiàn)了一個(gè)接口, 接口里面定義了UI操作的一組方法,Activity類的大部分代碼都是實(shí)現(xiàn)這個(gè)接口中聲明的方法, 那基本上就是采用的MVP架構(gòu).

MVP 框架

主流框架: theMVP, beam
重要的是理解MVP的架構(gòu)思想,在theMVP框架下, Activity充當(dāng)Presenter的角色, ViewDelegate充當(dāng)View層的角色. Model還是固定不變的數(shù)據(jù)層.

MVP 框架的核心思想是:

  1. View層和Model數(shù)據(jù)層不存在相互引用的關(guān)系.
  2. MVP把Activity中UI邏輯抽象成View接口, 把業(yè)務(wù)邏輯抽象成Presenter接口, Model層還是原來的數(shù)據(jù)層.
典型案例

使用ListView 顯示一組數(shù)據(jù)

下面截取了幾張講座的關(guān)鍵截圖

1.jpg
2.jpg
3.jpg
4.jpg

refer to:
動(dòng)腦學(xué)院 架構(gòu)設(shè)計(jì) MVP 視頻

------DONE.--------

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

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

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