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佑哥对我说的
* 这要是衍生出各种框架的原因。