Rx系列学习之旅(一)--MVP架构篇

来源:互联网 发布:破壁机推荐 知乎 编辑:程序博客网 时间:2024/06/05 08:25

一:MVP实现逻辑图:

注解:

  View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity)

  Model:负责存储、检索、操纵数据(有时也实现一个Modelinterface用来降低耦合)

  Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑

  View interface:需要View实现的接口,View通过Viewinterface与Presenter进行交互,降低耦合,方便进行单元测试

二:架构MVP框架:

1.分包

 model、

 view、

 presenter(contract)

2.先处理baseview、basepresenter

public interface BaseView {    void showLoading();    void  showError(String msg);    void  dismissLoading();}
public interface BasePresenter{}
3.处理contract契约类

public interface RecommendContract {    interface View extends BaseView {        void  showResult(List<AppInfo> datas);        void showNodata();    }    interface Presenter extends BasePresenter{        void requestDatas();    }}
4.处理model数据层

public class RecommendModel {    private  ApiService mApiService;    public RecommendModel(ApiService apiService){        this.mApiService  =apiService;    }    public  void getApps(Callback<PageBean<AppInfo>> callback){        mApiService.getApps("{'page':0}").enqueue(callback);    }}
5.处理presenter

public class RecommendPresenter implements RecommendContract.Presenter {    private RecommendModel mModel;    private RecommendContract.View mView;    public RecommendPresenter(RecommendContract.View mView,RecommendModel model) {        this.mView = mView;        mModel = model;    }    @Override    public void requestDatas() {        mModel.getApps(new Callback<PageBean<AppInfo>>() {            @Override            public void onResponse(Call<PageBean<AppInfo>> call, Response<PageBean<AppInfo>> response) {                if(response !=null){                    mView.showResult(response.body().getDatas());                }                else{                    mView.showNodata();                }            }            @Override            public void onFailure(Call<PageBean<AppInfo>> call, Throwable t) {                mView.showError(t.getMessage());            }        });    }}
6.处理view层

public class WelcomeActivity extends AppCompatActivity implements RecommendContract.View {    @Inject//dagger2的依赖注入    RecommendContract.Presenter mPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_welcome);        DaggerRecommendCompenent.builder().appCompenent(((MyApplication)getApplication()).getAppCompenent())             .recommendModule(new RecommendModule(this)).build().inject(this);        mPresenter.requestDatas();    }    @Override    public void showLoading() {    }    @Override    public void showError(String msg) {        Toast.makeText(this,"showError",Toast.LENGTH_SHORT).show();    }    @Override    public void dismissLoading() {    }    @Override    public void showResult(List<AppInfo> datas) {        Toast.makeText(this,datas.get(0).getDisplayName(),Toast.LENGTH_SHORT).show();    }    @Override    public void showNodata() {        Toast.makeText(this,"showNodata",Toast.LENGTH_SHORT).show();    }}











0 0
原创粉丝点击