天天看點

mvc和mvvm

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 對于大的項目,資料綁定和資料轉化需要花費更多的記憶體

上一篇: 了解MVVM模式
下一篇: MVVM設計模式

繼續閱讀