mvp 架构的分析与学习

目前mvp算是一个很高效的架构,它相对于mvc模式来说减少了项目的耦合性,后期的维护和迭代都非常清晰方便。

mvp : model 层 —— 数据的存储

          view层 —— activity、fragment都是属于view层

          presenter层 —— 项目的逻辑交互操作基本再这一层完成

使用mvp模式后,m和v层基本不存在交互,都是通过p层来完成交互和响应作用,大大减少了activity 或者 fragment 的代码量,也使得代码结构更加清晰。后期维护迭代只需要搞懂p层基本就可以知道项目的相关功能,来进行操作维护。下面以登录实例来进行mvp模式的分析:

一、搭建基础的mvp结构

    我一般写mvp结构会先写一些基础的mvp类,后面具体的类可以继承这些基本类。

    基本的p层类:实现和界面view的解绑:

public interface IBasePresenter {
    //解除与界面的绑定关系
    void unSubscribe();
}

    基本的v层类:实现加载loading 的显示和消失(具体的基本方法自己可以根据项目需求来设定):

public interface IBaseView {
    //显示加载loading
    void showLoadingDialog();

    //取消加载loading
    void hideLoadingDialog();
}

下面的是基本的presenter 逻辑操作基本实现类,实现基本的逻辑操作即view的解绑:

public class BaseCommenPresenter<T extends IBaseView> implements IBasePresenter {

    public T view;

    public BaseCommenPresenter(T view) {
        this.view = view;
    }

    @Override
    public void unSubscribe() {
        this.view = null;
    }
}

二、登录界面逻辑关系的实现

首先创建登录界面LoginActivity,设置简单登录界面的ui:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et_phone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="25dp"
        android:layout_marginRight="25dp"
        android:hint="请输入手机号码"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


    <Button
        android:layout_width="368dp"
        android:layout_height="45dp"
        android:layout_marginBottom="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginRight="0dp"
        android:onClick="login"
        android:text="登录"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent" />

</android.support.constraint.ConstraintLayout>

接下来就要想办法把逻辑操作分出去,不要再activity中进行大量的逻辑操作,那我们就需要创建LoginPresenter来进行登录的逻辑操作,并且需要创建LoginBaseView来进行一些界面响应即ui的更新。

我们先需要再activity中创建LoginPresenter绑定view层,还需要实现LoginBaseView进行界面ui响应

//绑定presenter层   
bindPresenter(new LoginPresenter(this));
/**
 * 描述:登录逻辑操作层
 */
public class LoginPresenter extends BaseCommenPresenter<LoginBaseView> implements LoginBasePresenter {
    public LoginPresenter(LoginBaseView view) {
        super(view);
    }

    @Override
    public void login(String phone, String pwd) {
        if (phone.equals("null")) {
            view.loginFailure("登录失败");
        } else {
            view.loginSuccess("登录成功");
        }
    }
}
/**
 * 描述:
 */
public interface LoginBaseView extends IBaseView {
    void loginSuccess(String msg);

    void loginFailure(String erro);
}

ok,基本到这里登录的mvp的简单框架已经搭建完毕。有什么问题大家可以在评论中加以反馈,希望大家相互学习哈~

github地址:mvp项目链接




猜你喜欢

转载自blog.csdn.net/cherry459/article/details/80606651