MVC(Model View Controller)
Model:根據APP文檔,model包括資料和操作資料的業務邏輯。
View:view通常是UIKit控件的集合,不能直接引用model,并且視圖本身沒有任何業務邏輯。
Controller:controller協調model和view之間的所有互動。
在MVC下,所有對象被歸類為一個model,一個view,一個controller。
工作流程:首先将使用者互動通知給controller,然後controller通過更新model來反應狀态的改變,model成功持有資料後通知controller來更新他們負責的view。
優點:
1 各司其職,互不幹涉:三個層各司其職其中一層的改變隊其他層的影響比較小。
2 有利于元件的重用:多個視圖對應一個模型的能力
缺點:
1 增加了系統結構額實作的複雜性:模型、視圖以及控制器分離,會增加結構的複雜性,并可能産生過多的更新操作,降低運作效率
2 與控制器間的連接配接過于緊密
3 較差的可測試性:MVC并不鼓勵測試人員編寫單元測試。因為view controller混合了視圖處理邏輯和業務邏輯,分離這些成分的單元測試成了一個艱巨的任務
4 厚重的ViewController:由于各種原因使ViewController過于臃腫龐大。
MVVM(Model View ViewModel)
衍生于MVC,它正式規範了視圖和控制器緊耦合的性質,把view和viewController正式聯系在一起。我們将它視為一個新的元件,并将controller中的業務處理邏輯,視圖顯示邏輯,網絡邏輯,資料緩存邏輯等抽取出來,放入視圖模型ViewModel中。
Model:資料模型。ViewModel可以引用Model,反過來不行
View | view controller:不能直接引用model,引用ViewModel
viewModel:放置一些業務處理邏輯,視圖顯示邏輯,網絡邏輯,資料緩存邏輯等
工作流程:首先View|View Controller将使用者互動通知給ViewModel,然後通過更新model來反應狀态的改變,model成功持有資料後通知ViewModel來更新他們負責的view
1 低耦合性:view可以獨立于model進行變化和修改,一個viewModel可以綁定到不同的view上。
2 可重用性:可以把一些視圖邏輯放入viewModel中,讓很多view重用這單視圖邏輯。
3 獨立開發:開發人員可以專注于業務邏輯和資料的開發viewModel,設計人員可以專注于頁面設計。
4 可測試性:可以針對viewModel進行測試
1 輕微的增加代碼量,但總體上減少了代碼的複雜度
2 資料綁定使得bug很難被調試
3 對于大的項目,資料綁定和資料轉化需要花費更多的記憶體