使用MVVM減少控制器程式碼實戰(減少56%)

發表於2016-07-18

減少比例= (360(原來的行數)-159(瘦身後的行數))/360 = 56%

父類 MVC 和MVVM 前後基本不動

父類主要完成如下三個功能:

  • 1)功能:MJRefrsh +上拉下拉沒有更多資料,封裝到父類的控制器 子類呼叫3行程式碼增加所有重新整理功能
  • 2)網路失敗:顯示網路錯誤的連結,寫在父類子類呼叫一行程式碼就可
  • 3)載入資料完成,列表中沒有資料提示View,比如購買介面,沒有購 買記錄,寫在父類子類一行程式碼呼叫

瘦身思路(總的程式碼量增加了30多行,但是控制器更清爽了)

111194882-ccaa36aa5b97aad3
  • 網路前網路請求函式是這樣的

瘦身結果

121194882-42c431716de3dba6

瘦身具體實現

1)網路請求移到ViewModel

以前網路程式碼直接寫在控制器中,如下所示

  • MVVM封裝後控制器中的網路請求是這樣的,控制器只取需要的東西,如下所示,不關心一些無關的細節,細節移到ViewModel中,5行搞定了網路請求獲取網路資料,還算精簡吧!

— 具體實現在viewModle中,viewModel新增hud,完成字典轉模型,對後臺做錯誤處理,顯示錯誤(部分工作在我自己封裝的底層網路請求實現的)

  • 將網路請求部分工作移到Viewmodel中,本控制器有三個網路請求 這樣節省程式碼量很可觀

2) datasource,以前直接寫在控制機器中,現在寫到dataSource 檔案中,控制器中呼叫dataSource這個類

3) viewdidload程式碼中, 以協議的方式載入資料來源

4) 本文的待討論的部分

  • 代理方法沒有剝離出來,如果剝離出來,控制器進一步減少到120行左右,代理剝離有點麻煩,感覺沒有必要
  • 建立collectionView 的程式碼沒剝離,剝離出來可以再減少20行左右,也參考一些別人的文章,目前覺得就這樣了,沒必要的
  • 也參考了一些別人的程式碼原文連結
    如何正確的寫好一個UITableView,寫的也很高大上,感覺各種繼承,真的很複雜耶
131194882-f9f91332ad0e6975
  • 程式碼 不能過度封裝,也不能不封裝

有人對我的網路請求比較感興趣,我的網路請求,針對公司的後臺資料結構做了封裝,hud 也封裝到網路請求中了


相關文章