基于iOS的MVVM框架

MVVM

什么是MVVM:

MVVM從字面上理解為model(數據模型),view|controller(視圖|視圖控制器),viewMode(視圖模型),Binder(綁定機制)。

  • model:
    MVVM中的model和MVC中的保持一致,負責容納數據信息。(PS:盡量減少在model中封裝額外的操作數據的業務邏輯,可以通過category和viewModel來實現業務邏輯。)
  • view:
    由MVC中的view+controller組成。主要負責
    在MVVM中吧view和controller結合起來,我們把它們視為一個組件。
  • viewModel:
    用來處理MVC中controller上冗余復雜的業務邏輯,主要功能包括以下
    1. 封裝業務邏輯處理
    2. 封裝網絡處理
    3. 封裝緩存數據
  • binder(一種綁定機制)
    一種可以讓開發者方便實現view和viewModel同步,避免編寫大量繁雜的樣板化代碼,實現數據綁定。(ReactiveCocoa)

使用 MVVM 注意:

  • viewController引用viewModel,但是反過來不行。(不能再viewModel中引入UIKit)。
  • MVVM可以兼容MVC。
  • MVVM配合一個綁定機制效果最好(ReactiveCocoa)。
  • viewController盡量不涉及業務邏輯,讓viewModel去做這些。
  • viewController是一個中間人,接收view的事件,調用viewModel的方法,響應viewModel的變化
  • viewModel絕對不能包含視圖view(UIKit),不然就就和view產生了耦合,不方便復用和測試。
  • viewModel相互之間可以有依賴

MVVM的優勢和缺點

  1. 優點
    • 低耦合:view可以獨立于model變化和修改,一個viewModel可以綁定到不同的view上
    • 可重用性:可以把一些視圖邏輯放在一個
    • 獨立開發:開發人員可以專注于業務邏輯和數據開發viewModel,設計人員可以專注于頁面設計
    • 可測試,可以針對于viewModel來測試
  2. 缺點
    • bug變得難以調試,當遇到了異常,可能是view的問題,也有可能是model的問題。數據綁定使得bug快速傳遞到其他地方,要定為原始出問題的地方就變得不那么容易了。
    • 對數據轉化需要花費更多的內存。主要來自于對數組內,item又再次包含數組。多次嵌套的類型。需要多次轉化才能用來view顯示。
    • 對于api返回的數據類型標準化要求較高,提高modelview的復用率,否則容易出現類型爆炸,加大了維護成本。

總結

MVVM = model+(view+controller)+viewModel
MVC = model+view+controller
MVVM在MVC的基礎上,抽離出了MVC中controller上冗余復雜的業務邏輯viewModel,其中弱化了controller的概念。
總而言之,MVC和MVVM各有各的好處優點,但缺點在它們所帶來的優勢面前不值一提。它們的低耦合,封裝性,高度復用,獨立開發模塊大大提高了開發效率。同時我們也要有一個變通的心,框架是為了服務于我們寫出高質量的代碼,不是我們為了套用框架而去寫代碼。比如MVC,我們針對于其詬病,也能寫出更輕量級的controller。東西是死的,人是活的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容