iOS-MVVM設計模式

談到MVVM不得不先說一下MVC,MVC(Model-View-Controller)。網絡

 

Model模型:用來呈現數據。測試

 

View視圖:用來呈現用戶界面。3d

 

Controller控制器:用來調節模型與視圖之間的交互。對象

 

 

在 iOS 應用中日益增加的重量級視圖控制器的問題。在典型的 MVC 應用裏, 許多邏輯被放在 View Controller 裏。blog

 

它們中的一些確實屬於 View Controller,但更多的是所謂的「表示邏輯(presentation logic),爲了避免讓控制器日益增大,便於測試管理,便出現了MVVM。繼承

 

MVVM:它實際上是一個 MVC 的加強版,並將表示邏輯從 Controller 移出放到一個新的對象裏,即 View Model。內存

 

在 iOS 上使用 MVVM 的動機,就是讓它能減小 View Controller 的複雜性並使得表示邏輯更易於測試。同步

ViewModel: 它位於 View/Controller 與 Model 之間。io

 

代碼示例:class

 

一、首先是model層的代碼,基於JSONModel封裝了BaseModel類(基類:之後的Model均可繼承此類),繼承自BaseModel,實現HomeModel類。

 

 

二、而後是View層的代碼,View層控件所有用懶加載方式,儘量減小內存消耗,不喜歡用XIB,因此習慣純代碼編寫。

 

 

三、接下來看ViewModel層,對封裝好的NetWork進行處理,request網絡數據存儲在HomeModel裏,最後將數據用Block帶出去,方便在VC中使用數據,reloadData。

 

 

四、最終,HomeViewController 將會變得很是輕量級:

 

 

怎麼樣?其實 MVVM 並無想像中的那麼難吧,並且更重要的是它也沒有破壞 MVC 的現有結構,只不過是移動了一些代碼,僅此而已。總結下 MVVM 相比 MVC 到底有哪些好處呢?

 

主要能夠概括爲如下三點:

 

一、因爲展現邏輯被抽取到了 viewModel 中,因此 view 中的代碼將會變得很是輕量級;

 

二、因爲 viewModel 中的代碼是與 UI 無關的,因此它具備良好的可測試性;

 

三、對於一個封裝了大量業務邏輯的 model 來講,改變它可能會比較困難,而且存在必定的風險。在這種場景下,viewModel 能夠做爲 model 的適配器使用,從而避免對 model 進行較大的改動。

 

經過前面的示例,咱們對第一點已經有了必定的感觸,至於第三點,可能對於一個複雜的大型應用來講,纔會比較明顯。

 

綜上所述,咱們只要將 MVC 中的 controller 中的展現邏輯抽取出來,放置到 viewModel 中,而後經過必定的技術手段,來同步 view 和 viewModel ,就完成了 MVC 到 MVVM 的轉變。

相關文章
相關標籤/搜索