iOS跳槽寶典-面試技術基礎篇--MVC含衔、MVP煎娇、MVVM設計模式

2.講一下MVC和MVVM,MVP

關于項目架構方面的面試題幾乎在每次面試中都會提到贪染,架構方式有很多種缓呛,從最開始的MVC模式,演化到MVP杭隙,然后到現(xiàn)在的MVVM模式哟绊,在不斷的演化過程中核心思想歸根結(jié)底還是降低各組件之間的耦合度,使得數(shù)據(jù)的流向更加清晰明了痰憎。演化的過程并不意味著新的模式比以前的模式更加高級票髓,只是對于項目的不同場景有了更多的選擇方案。下面就針對這三種比較常用的設計模式進行簡單的分析和對比铣耘,僅供參考洽沟。

MVC(Model、View蜗细、Controller)

MVC是比較直觀的架構模式裆操,最核心的就是通過Controller層來進行調(diào)控,首先看一下官方提供的MVC示意圖:

MVC.png
  • Model和View永遠不能相互通信炉媒,只能通過Controller傳遞

  • Controller可以直接與Model對話(讀寫調(diào)用Model)踪区,Model通過NOtification和KVO機制與Controller間接通信

Controller可以直接與View對話,通過IBoutlet直接操作View橱野,IBoutlet直接對應View的控件(例如創(chuàng)建一個Button:需聲明一個 IBOutlet UIButton * btn)朽缴,View通過action向Controller報告時間的發(fā)生(用戶點擊了按鈕)。Controller是View的直接數(shù)據(jù)源

優(yōu)缺點

  • 優(yōu)點:對于混亂的項目組織方式水援,有了一個明確的組織方式密强。通過Controller來掌控全局茅郎,同時將View展示和Model的變化分開

  • 缺點:愈發(fā)笨重的Controller,隨著業(yè)務邏輯的增加或渤,大量的代碼放進Controller系冗,導致Controller越來越臃腫,堆積成千上萬行代碼薪鹦,后期維護起來費時費力

MVP(Model掌敬、View、Presenter)

MVP模式是MVC模式的一個演化版本池磁,其中Model與MVC模式中Model層沒有太大區(qū)別奔害,主要提供數(shù)據(jù)存儲功能,一般都是用來封裝網(wǎng)絡獲取的json數(shù)據(jù)地熄;View與MVC中的View層有一些差別华临,MVP中的View層可以是viewController、view等控件端考;Presenter層則是作為Model和View的中介雅潭,從Model層獲取數(shù)據(jù)之后傳給View。

MVP設計模式.png

從上圖可以看出却特,從MVC模式中增加了Presenter層扶供,將UIViewController中復雜的業(yè)務邏輯、網(wǎng)絡請求等剝離出來裂明。

  • 優(yōu)點 模型和視圖完全分離椿浓,可以做到修改視圖而不影響模型;更高效的使用模型漾岳,View不依賴Model轰绵,可以說VIew能做到對業(yè)務邏輯完全分離

  • 缺點 Presenter中除了處理業(yè)務邏輯以外,還要處理View-Model兩層的協(xié)調(diào)尼荆,也會導致Presenter層的臃腫

MVVM(Model、Controller/View唧垦、ViewModel)

在MVVM中捅儒,view和ViewCOntroller聯(lián)系在一起,我們把它們視為一個組件振亮,view和ViewController都不能直接引用model巧还,而是引用是視圖模型即ViewModel。

viewModel是一個用來放置用戶輸入驗證邏輯坊秸、視圖顯示邏輯麸祷、網(wǎng)絡請求等業(yè)務邏輯的地方,這樣的設計模式褒搔,會輕微增加代碼量阶牍,但是會減少代碼的復雜性

  • 優(yōu)點 VIew可以獨立于Model的變化和修改喷面,一個ViewModel可以綁定到不同的View上,降低耦合走孽,增加重用

  • 缺點 過于簡單的項目不適用惧辈、大型的項目視圖狀態(tài)較多時構建和維護成本太大

合理的運用架構模式有利于項目、團隊開發(fā)工作磕瓷,但是到底選擇哪個設計模式盒齿,哪種設計模式更好,就像本文開頭所說困食,不同的設計模式边翁,只是讓不同的場景有了更多的選擇方案。根據(jù)項目場景和開發(fā)需求硕盹,選擇最合適的解決方案倒彰。

對于設計模式的理解,就像一千個人眼里就有一千個哈姆雷特一樣莱睁,以上觀點僅供參考待讳,如有差錯,歡迎指正仰剿。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末创淡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子南吮,更是在濱河造成了極大的恐慌琳彩,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件部凑,死亡現(xiàn)場離奇詭異露乏,居然都是意外死亡,警方通過查閱死者的電腦和手機涂邀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門瘟仿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人比勉,你說我怎么就攤上這事劳较。” “怎么了浩聋?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵观蜗,是天一觀的道長。 經(jīng)常有香客問我衣洁,道長墓捻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任坊夫,我火速辦了婚禮砖第,結(jié)果婚禮上撤卢,老公的妹妹穿的比我還像新娘。我一直安慰自己厂画,他們只是感情好凸丸,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袱院,像睡著了一般屎慢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忽洛,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天腻惠,我揣著相機與錄音,去河邊找鬼欲虚。 笑死集灌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的复哆。 我是一名探鬼主播欣喧,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梯找!你這毒婦竟也來了唆阿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锈锤,失蹤者是張志新(化名)和其女友劉穎驯鳖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體久免,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡浅辙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阎姥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片记舆。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丁寄,靈堂內(nèi)的尸體忽然破棺而出氨淌,到底是詐尸還是另有隱情,我是刑警寧澤伊磺,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站删咱,受9級特大地震影響屑埋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痰滋,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一摘能、第九天 我趴在偏房一處隱蔽的房頂上張望续崖。 院中可真熱鬧,春花似錦团搞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堕汞。三九已至,卻和暖如春复隆,著一層夾襖步出監(jiān)牢的瞬間拨匆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工挽拂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惭每,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓亏栈,卻偏偏與公主長得像台腥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绒北,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

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