2.講一下MVC和MVVM,MVP
關于項目架構方面的面試題幾乎在每次面試中都會提到贪染,架構方式有很多種缓呛,從最開始的MVC模式,演化到MVP杭隙,然后到現(xiàn)在的MVVM模式哟绊,在不斷的演化過程中核心思想歸根結(jié)底還是降低各組件之間的耦合度,使得數(shù)據(jù)的流向更加清晰明了痰憎。演化的過程并不意味著新的模式比以前的模式更加高級票髓,只是對于項目的不同場景有了更多的選擇方案。下面就針對這三種比較常用的設計模式進行簡單的分析和對比铣耘,僅供參考洽沟。
MVC(Model、View蜗细、Controller)
MVC是比較直觀的架構模式裆操,最核心的就是通過Controller層來進行調(diào)控,首先看一下官方提供的MVC示意圖:
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。
從上圖可以看出却特,從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ā)需求硕盹,選擇最合適的解決方案倒彰。
對于設計模式的理解,就像一千個人眼里就有一千個哈姆雷特一樣莱睁,以上觀點僅供參考待讳,如有差錯,歡迎指正仰剿。