先展示實現的效果圖如下: 此示例展示用的是MVVM結構形式,表述如下 M:數據Model的存儲,可以用來對屬性進行處理。(即胖model概念,上圖中xx萬人訂閱這個處理方法寫在Model內) V: View。用來統一管理控制項初始化與佈局。 VM:viewModel。負責網路請求及其他計算或事件處理 ...
先展示實現的效果圖如下:
此示例展示用的是MVVM結構形式,表述如下
M:數據Model的存儲,可以用來對屬性進行處理。(即胖model概念,上圖中xx萬人訂閱這個處理方法寫在Model內)
V: View。用來統一管理控制項初始化與佈局。
VM:viewModel。負責網路請求及其他計算或事件處理
目錄結構如下:
viewController文件夾下有一個控制器和一個MLDataView,這個view添加在控制器self.view上,然後這個控制器中其他view的初始化,添加和佈局都在這個MLDataView里進行,這樣把View分離整合到了一起。
MLDataViewModel里負責了網路請求,tableView代理和數據源方法的實現,及其他一些事件邏輯的封裝。傳統MVC一般這些代碼都是放在控制器內,現在這樣大量減少了控制器的代碼。
MLDataModel里存儲傳輸的數據,它也可以用來處理一些格式化的數據。如下圖
這樣model也可以分擔一些屬性的格式化處理。
整體架構上的一些其他封裝:
1.自定義MLHTTPSessionManager繼承自AFHTTPSessionManager,可以在自定義的類里優雅地處理請求頭,響應頭或https設置相關的一些信息
2.網路請求擴展性強:自己公司的網路請求實現文件里邏輯要多得多,包括Token失效,刷新RefreshToken,網路請求錯誤碼的攔截等。這些業務都可以根據自己的需要加入。
3.MLCustomHud彈出toast提示。實用性非常強。
4.Base文件夾下有兩個類,其實企業及項目基本都會建立基類,也就是所以view都可以有一個基類,如tableView,UIlabel,UIButton,WKWebView,UITableViewCell等等,然後可以在基類中建立一些快捷方法設置屬性等。
5.Category文件夾下Unicode里的代碼為了實現nslog無法輸出中文的問題。
6.Category下UIView+HudCount分類,用runTime對view進行引用計數。它的獨有優勢在於防止多個網路請求同時發生時對Loading框產生干擾,即可防止loading框重疊或提前消失。
PS:真正的mvvm應該是viewModel與View上的數據是雙向綁定的,這裡只是簡單實現結構的分層,並沒有實現雙向綁定,雙向綁定內容後期加上會再分享出來。
最後附上demo地址:
碼雲:https://gitee.com/LiJinShi/MVVM_Demo
gitHub:https://github.com/LiJinShi/MVVM_Demo