在介紹MVVM(Model View viewModel)之前,先簡單的介紹一下MVC(Model View Controller)和MVP(Model View PResenter)。如果這方便比較了解,可以忽略此部分,直接閱讀MVVM相關的內容。
對于MVC我們是比較熟悉,對于原生的Android項目來說,layout.xml里面的xml文件就對應于MVC的view層,里面都是一些view的布局代碼,而各種java bean,還有一些類似repository類就對應于model層,至于controller層,就是各種activity。
調用關系:
注意點:
V和M通過觀察者模式操作,而同步操作是V主動向M請求數據(凡是在M中設置接收的V都會收到數據的變更請求)邏輯C的測試困難:V的操作是由自己完成的,對于C的改變無法實時顯示V依賴特定的M,復用性比較差MVP作為MVC的演化,解決了MVC不少的缺點,對于Android來說,MVP的model層相對于MVC是一樣的,而activity和fragment不再是controller層,而是純粹的view層,所有關于用戶事件的轉發全部交由presenter層處理。
調用關系:
注意點:
V不再負責同步邏輯交給P完成(業務邏輯和同步邏輯)P和V解耦:通過drgger2(編譯時注解)實現V和P的解耦 -邏輯的操作基本由P完成造成P的代碼臃腫它和MVP的區別貌似不大,只不過是presenter層換成了viewmodel層,還有一點就是view層和viewmodel層是相互綁定的關系,這意味著當你更新viewmodel層的數據的時候,view層會相應的變動ui。
調用關系:
注意點:
V和M實現了自動化V和M之間通過觀察者模式操縱,而同步操作是由V主動向M請求數據的(然后更新對自己界面) 特別說明:對于這一點的好處就是當M中的數據改變后,凡是在M中設置接收的V都會收到數據的變更請求,保持了同一個M不同的V顯示的效果過于簡單的圖形不適合新聞熱點
疑難解答