关于MVP的一点小小的看法


今天记录一下关于自己试用MVP的一点自己的理解。mvp 设计模式的好处我就不多说了 ,自行百度吧。

关于如何使用MVP模式。我的理解是这样子的。MVP--三者各司其职。我将MVP比作成一个厨师做饭, model作为宫保鸡丁的样式模式(即你需要多少的盐,要做一个什么口味的),View是厨师最终做出来展示的宫保鸡丁,P是他如何做的。。。。个人理解不喜勿喷!!

接下来讲如何做。。不对是如何写。。

首先我们要设计一个最基础的控制器,Contract,它直接控制着MVP三者(都是接口)的功能,我用一个LoginContract做一个范例。

首先设计一个适用于你自己的baseContarct

public interface BaseContract {
    public interface View {

    }

    public interface Presenter {
    }
   
}

然后是具体定制的Contract,我们用 LoginContract来操作

public interface LoginContract {
    interface Presenter extends BaseContract.Presenter {
        void loginning();//执行登陆接口
        void destory();//销毁登录请求
    }

    interface View extends BaseContract.View {
        void loginSuccess(Login login);//登录成功
        void loginFail(String failed);//登录失败
        void loginError(String error);//请求发生错误
        String getUserName();//得到用户名
        String getPassword();//得到密码
    }
   
}
接下来就是逐一的实现MVP。

先实现Presenter

public class LoginPresenter implements LoginContract.Presenter {
    private LoginContract.View view;
    public LoginPresenter( LoginContract.View view,) {
        this.view = view;
    }   
	
    @Override   
    public void loginning() {  
    //在这里面实现登录请求的方法 
    }  
    @Override   
    public void destory() {  
    //这里面实现销毁登录请求的方法 
    }
}

接下来是Model,仅仅是一个基类。。。


最后是view,即 LoginActivity

由于没有时间抽出来一个demo ,我只讲一下如何实现(目前还在项目里面呢)

首先在LoginActivity实现

 implements LoginContract.View

接下来绑定presenter

LoginPresenter  presenter = new LoginPresenter( LoginActivity.this,LoginContract.model);

最后在LoginActivity实现具体的方法

@Override
public void loginSuccess(Login loginInfo) {

}

@Override
public void loginFail(String failed) {

}

@Override
public void loginError(String error) {

}

@Override
public String getUserName() {
    return etUserName.getText().toString();
}

@Override
public String getPassword() {
    return etPassword.getText().toString();
}

 其实MVP,model 控制着 这个模块的具体功能的模型,我理解为数据源,更简单点,可以说是基类V就是view,即视图,你要展现给用户看到的东西。P则是逻辑业务,编写代码产生的逻辑都在这个里面生成。

这样MVP就会被高度的解耦,presenter可以被抽取出来用在任何你想用在的地方。

 但是MVP模式目前出现的两个小缺点,

1.虽然高度解耦了,但是整个项目的代码量变的更多了。

2.高度解耦的碎片化,也就意味着你的项目一旦有所改变,从控制器到MVP几乎都要跟着改变。

目前先浅显的讲解一下,等有时间抽出来,做一个完整的DEMO

我叫小马,我会坚持写一些东西的。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值