Android开发经验谈Android开发程序员

Android中怎么应用MVP架构

2017-11-01  本文已影响131人  AntDream

首先,啥是MVP架构?

MVP架构是一种组织代码的形式结构,全称是Model View Presenter,其中每一个单词代表架构中的一部分,即分别为Model:处理数据相关的,View:界面显示的,Presenter:连接View和Model的中介

MVP架构有啥优势和特点

如何在项目中应用MVP模式

下面我们直接通过代码来演示如何用MVP架构来组织代码
public interface MvpContact {

    interface Presenter {
        /**
         * 获取数据
         */
        void getData();
    }

    interface View {
        /**
         * 更新数据到View
         */
        void showData();

        /**
         * 弹出错误提示
         */
        void showError();
    }
}
public class MvpModel {

    public void getData(GetDataListener listener) {
        //执行具体的请求

        //请求失败
        listener.onError();

        //请求成功
        listener.onSuccess();
    }
}
public interface GetDataListener {
    /**
     * 请求失败
     */
    void  onError();

    /**
     * 请求成功
     */
    void onSuccess();

}
public class MvpPresenter implements MvpContact.Presenter{

    MvpContact.View view;
    MvpModel model;

    public MvpPresenter(MvpContact.View mView) {
        view = mView;
        model = new MvpModel();
    }

    @Override
    public void getData() {
        model.getData(new GetDataListener() {
            @Override
            public void onError() {
                //请求失败弹出提示等
                view.showError();
            }

            @Override
            public void onSuccess() {
                //请求成功更新数据到UI
                view.showData();
            }
        });
    }
}
public class MvpActivity extends Activity implements MvpContact.View{

    MvpPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mvp);

        presenter = new MvpPresenter(this);

        //请求数据
        presenter.getData();
    }

    @Override
    public void showData() {

    }

    @Override
    public void showError() {

    }
}

以上就是MVP的简单应用啦!是不是很简单?

MVP架构的应用是很灵活的,可以根据需要进行修改。比如上面我们实现的MVP模式中,Model层通过设置Listener将处理结果回调给Presenter层,这就会有一个问题:当Model层中的数据处理方法比较多的时候,我们就需要写很多的回调接口了,因为可能每个数据请求成功返回的结果都是不同的实体!

我们可以将上面的实现修改一下,直接在Presenter里面进行数据的处理,把Model给撇掉,对应修改后的MvpPresenter类如下

public class MvpPresenter implements MvpContact.Presenter{

    MvpContact.View view;

    public MvpPresenter(MvpContact.View mView) {
        view = mView;
    }

    @Override
    public void getData() {
        //执行具体的请求

        //请求失败弹出提示等
        view.showError();

        //请求成功更新数据到UI
        view.showData();
    }
}

好了,以上就是MVP在Android中的简单应用了。

当然架构有很多种,除了这里介绍的MVP,还有MVVM、MVC等。我们的目标是让我们的项目结构更加合理,扩展性更强,能够拥抱变化。每种架构都有其特点和优势,可以根据实际需要来选择。


最后有兴趣的小伙伴可以学习一下Google官方的示例

Google官方的MVP项目


欢迎关注我的微信公众号,期待与你一起学习,一起交流,一起成长!


AntDream
上一篇 下一篇

猜你喜欢

热点阅读