MVP模式

從字面意思來理解叨吮,MVP 即 Modal View Presenter(模型 視圖 協(xié)調器)彬祖,MVP 實現(xiàn)了 Cocoa 的 MVC 的愿景硬鞍。MVP 的協(xié)調器 Presenter 并沒有對 ViewController 的生命周期做任何改變,因此 View 可以很容易的被模擬出來睬澡。在 Presenter 中根本沒有和布局有關的代碼雀哨,但是它卻負責更新 View 的數(shù)據和狀態(tài)磕谅。MVC 和 MVP 的區(qū)別就是,在 MVP 中 M 和 V 沒有直接通信雾棺。

MVP 是第一個如何協(xié)調整合三個實際上分離的層次的架構模式膊夹,既然我們不希望 View 涉及到 Model,那么在顯示的 View Controller(其實就是 View)中處理這種協(xié)調的邏輯就是不正確的捌浩,因此我們需要在其他地方來做這些事情放刨。例如,我們可以做基于整個 App 范圍內的路由服務尸饺,由它來負責執(zhí)行協(xié)調任務进统,以及 View 到 View 的展示。這個出現(xiàn)并且必須處理的問題不僅僅是在 MVP 模式中浪听,同時也存在于以下集中方案中螟碎。

1)MVP模式下的三個特性的分析:

任務均攤 -- 我們將最主要的任務劃分到 Presenter 和 Model,而 View 的功能較少迹栓;

可測試性 -- 非常好掉分,由于一個功能簡單的 View 層,所以測試大多數(shù)業(yè)務邏輯也變得簡單克伊;

易用性 -- 代碼量比 MVC 模式的大酥郭,但同時 MVP 的概念卻非常清晰。

2)iOS MVP 示意圖:

就 MVP 而言愿吹,UIViewController 的子類實際上就是 Views 并不是 Presenters不从。這點區(qū)別使得這種模式的可測試性得到了極大的提高,付出的代價是開發(fā)速度的一些降低洗搂,因為必須要做一些手動的數(shù)據和事件綁定消返。

還有一些其他形態(tài)的 MVP -- 監(jiān)控控制器的 MVP。這個變體包含了 View 和 Model 之間的直接綁定耘拇,但是 Presenter 仍然來管理來自 View 的動作事件撵颊,同時也能勝任對 View 的更新。

3)規(guī)范的 MVP 設計模式:

1惫叛、View 層比較簡單明倡勇,就是 View 的一些封裝、重用嘉涌。在一款精心設計過的 App 里面妻熊,應該有很多 View 是可以封裝重用的。比如一些自己的 TableViewCell仑最,自己設計的 Button扔役,一些 View(包含一些子 View,UI 精心設計過警医,在項目里多處出現(xiàn)的)等等亿胸。

2、Model 層應該不僅僅是創(chuàng)建一個數(shù)據對象预皇,還應該包含網絡請求侈玄,以及數(shù)據 SQLite 的 CRUD 操作(比如 iOS 平臺,一般以 FMDB 框架直接操作 sql吟温,或者用 CoreData) 序仙。一般可以將數(shù)據對象是否需要緩存設計成一個字段 isCache,或者針對整個項目設計一個開存儲關鲁豪,決定整個項目是否需要數(shù)據緩存潘悼。我們常見的新聞類 App,在離線的時候看到的數(shù)據爬橡,都是做了緩存處理的挥等。比如一些金融類的 App,實時性比較高堤尾,是不做緩存的肝劲。

3、Presenter 層并不涉及數(shù)據對象的網絡請求和 SQLite 操作郭宝,只是 Model 層和 View 層的一個橋梁辞槐。Presenter 層就不至于太臃腫,容易看懂粘室。一些大的 App榄檬,或因為上線時間比較久了,經歷過眾多程序員的修補衔统,或因前期并未做好架構鹿榜,以至于打開一個類海雪,幾千行的代碼,看著自己都暈舱殿。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末奥裸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沪袭,更是在濱河造成了極大的恐慌湾宙,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冈绊,死亡現(xiàn)場離奇詭異侠鳄,居然都是意外死亡,警方通過查閱死者的電腦和手機死宣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門伟恶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毅该,你說我怎么就攤上這事知押。” “怎么了鹃骂?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵台盯,是天一觀的道長。 經常有香客問我畏线,道長静盅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任寝殴,我火速辦了婚禮蒿叠,結果婚禮上,老公的妹妹穿的比我還像新娘蚣常。我一直安慰自己市咽,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布抵蚊。 她就那樣靜靜地躺著施绎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贞绳。 梳的紋絲不亂的頭發(fā)上谷醉,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音冈闭,去河邊找鬼俱尼。 笑死,一個胖子當著我的面吹牛萎攒,可吹牛的內容都是我干的遇八。 我是一名探鬼主播矛绘,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刃永!你這毒婦竟也來了货矮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤揽碘,失蹤者是張志新(化名)和其女友劉穎次屠,沒想到半個月后园匹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雳刺,經...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年裸违,在試婚紗的時候發(fā)現(xiàn)自己被綠了掖桦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡供汛,死狀恐怖枪汪,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情怔昨,我是刑警寧澤雀久,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站趁舀,受9級特大地震影響赖捌,放射性物質發(fā)生泄漏。R本人自食惡果不足惜矮烹,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一越庇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奉狈,春花似錦卤唉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跛蛋,卻和暖如春碰纬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背问芬。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工悦析, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人此衅。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓强戴,卻偏偏與公主長得像亭螟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骑歹,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內容

  • Google官方MVP Sample代碼解讀 關于Android程序的構架, 當前(2016.10)最流行的模式即...
    圣騎士wind閱讀 3,946評論 2 62
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,736評論 25 707
  • 本文轉載自:https://segmentfault.com/a/1190000003927200Android ...
    加油碼農閱讀 2,840評論 3 37
  • 街角的屋檐下预烙,一盞年久失修忽明忽暗的燈映著他清瘦的面龐,雨滴不時落到他瘦弱的肩膀道媚,身旁的地上放著柳枝編的筐扁掸,玫瑰于...
    柳曉生閱讀 542評論 8 12
  • 小狐貍說,儀式感是必須的最域,因為有了儀式谴分,我們才會把今天當成特別的一天,而不是任何別的流水般過去的某一天镀脂。 去年九月...
    菲樂閱讀 738評論 0 4