MVP:Model View Present。
前言:抱着最起碼的要求盡力去做好每一件事 ——秋不白
終於理解了MVP,給大夥分享下,大神勿噴,小白專用。第一次寫博客好緊張,怎麼樣才能表現出經常寫博客的樣子,各位老鐵。
* Model: 處理數據
* View : 顯示數據(Activity或Fragment)
* Present: 連接Model層和View層
* Mvp 框架個人理解
* 1. 由View層發起請求(就是在View層裏面 調用present.getData() 方法啦,說的這麼高端)
* 2. 在present.getData()方法裏面,調用Model.getData()去執行數據請求,(就是所謂的 由Present層傳遞請求給Model層)
* 3. 然後,present回傳請求數據結果(成功就顯示數據,失敗就提示失敗)
下面直接看代碼
第一步,創建一個接口,具備兩個功能,一個是請求數據,一個是回傳數據
/**
* 回調接口
* Created by yinsxi on 2018/7/18.
*/
public interface MvpContact {
interface Present{
/**
* 獲取數據
*/
void getData();
}
interface View{
/**
* 展示數據
*/
void showData();
/**
* 展示錯誤數據
*/
void showError();
}
}
第二步
還是一個接口,用來請求數據時,失敗或成功的回調
/**
* 請求數據 回調
* Created by yinsxi on 2018/7/18.
*/
public interface GetDataListenser {
void onFailed();
void onSuccess();
}
第三步
編寫你的數據請求類,也就是Model層,處理數據的
/**
* Created by yinsxi on 2018/7/18.
*/
public class MvpModel {
public void getData(GetDataListenser listenser){
/**
* 具體執行業務代碼
* 此處省略一百行代碼
* */
/**
* 根據最後請求結果
* 失敗或成功回調
*/
listenser.onFailed();
listenser.onSuccess();
}
}
第四步
編寫Present層,用來傳遞請求數據,和回傳數據
/**
* Mvp 中的 Present層, 連接View層和Model層
* 1. 傳遞數據請求
* 2. 回傳 數據請求結果及數據
* Created by yinsxi on 2018/7/18.
*/
public class MvpPresent implements MvpContact.Present{
MvpContact.View view;
MvpModel model;
public MvpPresent(MvpContact.View view) {
this.view = view;
model = new MvpModel();
}
/**
* 中間層傳遞請求
*/
@Override
public void getData() {
model.getData(new GetDataListenser() {
@Override
public void onFailed() {
view.showError();
}
@Override
public void onSuccess() {
view.showData();
}
});
}
}
到這裏基本完成簡易MVP框架了,看看Activity如何使用,相信你應該知道了
public class MainActivity extends AppCompatActivity implements MvpContact.View{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化 Mvp 中的Present層
MvpPresent mvpPresent = new MvpPresent(this);
//由View層發起請求
mvpPresent.getData();
}
@Override
public void showData() {
}
@Override
public void showError() {
}
}
最後僅個人理解,可能存在失誤:
* 不必太過於在意是什麼框架mvp mvc,框架再怎麼變,也離不開,最根本的設計,就是封裝。
* 一個數據請求當然是放到單獨一個類裏面去執行,作爲activty只需要這個類回傳結果,失敗或成功。
* 當然了,遵循框架,有利於後期維護,一句話,寫出機器能懂得代碼很簡單,寫出人能看懂的代碼就很難,這是我兄dei佑哥對我說的
* 這要是衍生出各種框架的原因。