iOS 架構(gòu)MVP,MVVM淺談

iOS 架構(gòu)設(shè)計

1.概述

iOS 開發(fā)中,MVC(Model View Controller)是構(gòu)建iOS App的標準模式,是蘋果推薦的一個用來組織代碼的權(quán)威范式贫橙,iOS自己的庫基本都是這個模式捍歪,而它的缺點如下:

  • ViewController代碼厚重
  • 功能模塊劃分混亂
  • 可測試性差

隨著工程越來越大也表現(xiàn)得更加明顯,繼而MVVM恨狈,MVP等架構(gòu)設(shè)計流行起來;通過這個簡單 demo 結(jié)合類圖可以清晰的看出MVVM和MVP架構(gòu)設(shè)置的特點疏哗。

2.MVVM

pg1.png

mvc中的model,添加業(yè)務(wù)邏輯成胖model拴事,再添加操作數(shù)據(jù)的接口就成了viewmodel沃斤,旨在返回UI控件可以直接使用的數(shù)據(jù),需求改動后只需改動viewmodel中生成數(shù)據(jù)的邏輯即可

思路:

  • view 引用viewModel刃宵,返回view的可用數(shù)據(jù) 衡瓶,但反過來不行(即不要在viewModel中引入#import UIKit.h,任何視圖本身的引用都不應(yīng)該放在viewModel中)
  • viewModel 引用model牲证,但反過來不行
  • viewController 盡量不涉及業(yè)務(wù)邏輯哮针,讓 viewModel 去做這些事情

優(yōu)勢:

  • View可以獨立于Model變化和修改,一個 viewModel 可以綁定到不同的 View 上
  • 開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(viewModel),設(shè)計人員可以專注于頁面設(shè)計
  • 通常界面是比較難于測試的十厢,而 MVVM 模式可以針對 viewModel來進行測試

弊端:

  • 數(shù)據(jù)綁定使得Bug 很難被調(diào)試等太,有可能是View的代碼問題,也可能是 Model的代碼有問題
  • 對于過大的項目蛮放,數(shù)據(jù)綁定需要花費更多的內(nèi)存缩抡。

3.MVP

pg2.png

mvc中的view,添加特定的UI交合邏輯包颁,變成自定義view瞻想,再添加數(shù)據(jù)的填充邏輯就變成了presenter

思路:

  • 將Controller中某一UI模塊單獨抽取一個presenter類,將這個模塊的UI控件操作及數(shù)據(jù)處理封裝其中娩嚼,以delegate方式通知Controller它需要關(guān)心的事件
  • Controller其實將view和viewController傳遞給了P層, 這樣P層其實就擁有了控制器的權(quán)利, 完全可以行使控制器的職責.
  • Controller又持有Presenter, 那么它只需要調(diào)用P層暴露出的接口, 就完全可以完成整個業(yè)務(wù)邏輯和頁面展示
  • Controller只負責控制頁面跳轉(zhuǎn)蘑险,調(diào)用其它模塊。
  • 任務(wù)均攤岳悟,我們將最主要的任務(wù)劃分到 Presenter 和 Model佃迄,而 View 的功能較少

優(yōu)勢:

  • 模塊化UI組件,Controller結(jié)構(gòu)更加清晰贵少,責任更單一呵俏,只需關(guān)注各個大模塊的調(diào)用
  • UI組件復(fù)用好

弊端:

  • presenter之間的交互比較困難,模塊抽取粒度衡量難度大

4.總結(jié)

MVVM春瞬,MVP各個有各自的優(yōu)缺點柴信,主要職責是減少Controller里面的代碼量

  • MVVM通過抽取業(yè)務(wù)數(shù)據(jù)邏輯而減少Controller的代碼
  • MVP通過模塊化各個UI組件來減少Controller的代碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宽气,隨后出現(xiàn)的幾起案子随常,更是在濱河造成了極大的恐慌,老刑警劉巖萄涯,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绪氛,死亡現(xiàn)場離奇詭異,居然都是意外死亡涝影,警方通過查閱死者的電腦和手機枣察,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來燃逻,“玉大人序目,你說我怎么就攤上這事〔螅” “怎么了猿涨?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姆怪。 經(jīng)常有香客問我叛赚,道長澡绩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任俺附,我火速辦了婚禮肥卡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘事镣。我一直安慰自己步鉴,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布璃哟。 她就那樣靜靜地躺著唠叛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沮稚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天册舞,我揣著相機與錄音蕴掏,去河邊找鬼。 笑死调鲸,一個胖子當著我的面吹牛盛杰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播藐石,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼即供,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了于微?” 一聲冷哼從身側(cè)響起逗嫡,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎株依,沒想到半個月后驱证,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡恋腕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年抹锄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荠藤。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伙单,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哈肖,到底是詐尸還是另有隱情吻育,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布牡彻,位于F島的核電站扫沼,受9級特大地震影響出爹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缎除,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一严就、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧器罐,春花似錦梢为、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肴沫,卻和暖如春粟害,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颤芬。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工悲幅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人站蝠。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓汰具,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菱魔。 傳聞我的和親對象是個殘疾皇子留荔,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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