大家都熟知我們搭建框架用的是MVC?
1.View 傳送指令到 Controller
2.Controller 完成業務邏輯后,要求 Model 改變狀態
3.Model 將新的數據發送到 View,用戶得到反饋
大家想過這樣會有什么問題嗎?顯然是有的,不然為什么會有MVP和MVVM的誕生呢,是吧。問題就在于xml作為view層,控制能力實在太弱了,你想去動態的改變一個頁面的背景,或者動態的隱藏/顯示一個按鈕,這些都沒辦法在xml中做,只能把代碼寫在activity中,造成了activity既是controller層,又是view層的這樣一個窘境。大家回想一下自己寫的代碼,如果是一個邏輯很復雜的頁面,activity或者fragment是不是動輒上千行呢?這樣不僅寫起來麻煩,維護起來更是噩夢。
MVC還有一個重要的缺陷,view層和model層是相互可知的,這意味著兩層之間存在耦合,耦合對于一個大型程序來說是非常致命的,因為這表示開發,測試,維護都需要花大量的精力 。此時就出現了MVP
MVP
MVP 模式將 Controller 改名為 Presenter
它們之間最大的區別就是model層與View層之間的交互? MVC中是允許Model和View進行交互的,而MVP中很明顯,Model與View之間的交互由Presenter完成。還有一點就是Presenter與View之間的交互是通過接口的!
顧名思義 Model? View? Presenter
View 對應于Activity,負責View的繪制以及與用戶交互
Model 依然是業務邏輯和實體模型
Presenter 負責完成View于Model間的交互
所謂的mvp,即是(model-處理業務邏輯(主要是數據讀寫,或者與后臺通信(其實也是讀寫數據)),view-處理ui控件,presenter-主導器,操作model和view)
對于Android來說,MVP的model層相對于MVC是一樣的,而activity和fragment不再是controller層,而是純粹的view層,所有關于用戶事件的轉發全部交由presenter層處理充當了view 與model的橋梁。使view層與model層不在相互可知,完全的解耦。后期易維護
MVP是通過抽取接口的方式來規范化代碼 ?不讓你的代碼冗余!
首先說一下View層 ? 我們把View所有我們能夠看見的操作抽取成一個接口 在一個Activity中我們實現這個接口來與Presenter層進行解耦?
Model層 ?它包括所有的數據請求 數據庫的操作 耗時的操作 ? 我們通過接口將這些數據傳到Presenter層 ??
Presenter層 ?持有View層和Model層的數據 ? 是它們之間的橋梁