簡單介紹MVC、MVP和MVVM模式

說到這三個框架,應該說是所有做安卓開發的童鞋都會用到的,之前在github上看到一位大神寫的相關的demo,覺得用的非常好,在此我介紹下我對這三個框架的理解:


MVC原理圖
MVC
: MVC,Model View Controller,是軟件架構中最常見的一種框架,簡單來說就是通過controller的控制去操作model層的數據,並且返回給view層展示,當用戶出發事件的時候,view層會發送指令到controller層,接着controller去通知model層更新數據,model層更新完數據以後直接顯示在view層上,這就是MVC的工作原理。
: 對於原生的Android項目來說,layout.xml裏面的xml文件就對應於MVC的view層,裏面都是一些view的佈局代碼,而各種java bean,還有一些類似repository類就對應於model層,至於controller層,當然就是各種activity和fragment。套用我上面說的MVC的工作原理來理解,比如你的界面有一個按鈕,按下這個按鈕去網絡上下載一個文件,這個按鈕是view層的,是使用xml來寫的,而那些和網絡連接相關的代碼寫在其他類裏,比如你可以寫一個專門的networkHelper類,這個就是model層,那怎麼連接這兩層呢?是通過button.setOnClickListener()這個函數,這個函數就寫在了activity中,對應於controller層。
: 那麼MVC框架有什麼缺點呢?問題就在於xml作爲view層,控制能力實在太弱了,你想去動態的改變一個頁面的背景,或者動態的隱藏/顯示一個按鈕,這些都沒辦法在xml中做,只能把代碼寫在activity中,造成了activity既是controller層,又是view層的情況。如果是一個邏輯很複雜的頁面,activity或者fragment本身已經寫了很複雜了,這樣修改起來不僅麻煩,而且後期很難維護。MVC還有一個重要的缺陷就是view層和model層是相互可知的,這意味着兩層之間存在耦合,高耦合對於一個大型程序來說是非常致命的,因爲這表示開發,測試,維護都需要花大量的精力。
MVP原理圖

MVP
MVP,Model View Presenter,MVP作爲MVC的演化,解決了MVC不少的缺點,對於Android來說,MVP的model層相對於MVC是一樣的,而activity和fragment不再是controller層,而是純粹的view層,所有關於用戶事件的轉發全部交由presenter層處理。
最明顯的差別就是view層和model層不再相互可知,完全的解耦,取而代之的presenter層充當了橋樑的作用,用於操作view層發出的事件傳遞到presenter層中,presenter層去操作model層,並且將數據返回給view層,整個過程中view層和model層完全沒有聯繫。可能有的童鞋會問,雖然view層和model層解耦了,但是view層和presenter層不是耦合在一起了嗎?其實不是的,對於view層和presenter層的通信,我們是可以通過接口實現的,具體的意思就是說我們的activity,fragment可以去實現實現定義好的接口,而在對應的presenter中通過接口調用方法。不僅如此,我們還可以編寫測試用的View,模擬用戶的各種操作,從而實現對Presenter的測試。這就解決了MVC模式中測試,維護難的問題。當然,其實最好的方式是使用fragment作爲view層,而activity則是用於創建view層(fragment)和presenter層(presenter)的一個控制器。

MVVM原理圖

MVVM
MVVM,Model View ViewmodelModel,它和MVP的區別貌似不大,只是presenter層換成了viewmodel層,還有一點就是view層和viewmodel層是相互綁定的關係,這意味着當你更新viewmodel層的數據的時候,view層會相應的變動ui。
備註
因爲本人幾個項目裏面只用過MVC、MVP框架,所以只能簡單的介紹下那麼多,有感興趣的童鞋可以去大神的github上看下:

貼出來大神寫的關於這三個框架的demo的GitHub地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章