簡述MVC&MVVM

簡述MVC&MVVM

一、概述MVC

1、Mvc:模型(model)視圖(view)控制器(controller)

Mvc關係圖
Model:處理存儲數據,也就是創建數據模型,供controller獲取數據,減少了代碼的重複性

View:用戶看到的並且交互的界面,就是將數據顯示到界面中

Controller:處理用戶交互的控制器,也就是當用戶輸入需求控制器就去調用相應的模型和視圖去完成用戶的需求

2、Mvc的弊端

  • 厚重的View Controller:網絡數據的請求及後續處理,本地數據庫操作,以及一些帶有工具性質輔助方法都加大了Massive View Controller的產生。

  • 無處安放的網絡邏輯:如果把所有的對象都放入Controller中,這會加劇了Massive View Controller的問題

  • 較差的可測試性:由於View Controller混合了視圖處理邏輯和業務邏輯,所以不便分離

二、概述MVVM

1、MVVM:mvvm的核心思想是數據模型的雙向綁定,這樣當用戶輸入請求後vm從view拿到數據提交給model後model的處理結果要傳遞給view與用戶進行交互

在這裏插入圖片描述

  • 在MVVM 中,view 和 view controller正式聯繫在一起,我們把它們視爲一個組件。
  • view 和 viewController 都不能直接引用model,而是引用視圖模型(viewModel)
  • viewModel 是一個放置網絡邏輯與其他代碼的地方
  • MVVM在總體上減少了代碼的複雜性

2、MVVM的優勢

  • 低耦合:View可以獨立於Model變化和修改,一個ViewModel可以綁定到不同的View上
  • 可重用性:可以把一些視圖邏輯放在一個ViewModel裏面,讓很多view重用這段視圖邏輯
  • 獨立開發:開發人員可以獨立的開發各自的模塊
  • 可測試:通常界面是比較難於測試的,而 MVVM 模式可以針對ViewModel來進行測試

3、MVVM的弊端

  • 數據綁定使得Bug 很難被調試。
  • 數據綁定和數據轉化需要花費更多的內存(成本)。
  • 同一API的數據被不同View展示時,難以控制數據轉化的代碼,它們有可能會散落在任何需要的地方。

三、總結

MVVM是MVC的升級版,完全兼容當前的MVC架構,雖然MVVM在一定程度上減輕了ViewController的臃腫度,但是View和ViewModel之間的數據綁定使得 MVVM變得複雜和難用了。如果你的需求沒有那麼大,controller完全可以負載的起,選擇mvc也是可以的。當項目逐漸擴大,業務增加,就會造成控制器代碼量特多不易維護和測試,就需要進行封裝,給控制器減減肥,MVVM就顯得特別需要。