浅谈mvp架构模式

浅谈mvp架构模式

MVP架构
MVP是 model,view,presenter的缩写,分别代表着数据,视图和发布层。mvp的前身是mvc,他和mvc最显著的区别在于mvp中的view层不直接与model通信,所有的通信交流都发生在presenter上。在传统的Model View Controller(MVC)中,我们将所有的业务逻辑放入Controller中,这样导致Controller将异常的庞大,导致我们的程序的可维护性和可测试性非常的差,视图和控制器过于紧密的联系,妨碍了其独立重用;视图对数据模型的低效率访问,也损害了操作性能。基于传统MVC的不足,衍生出了MVP。

View: 是显示数据(model)并且将用户指令(events)传送到presenter以便作用于那些数据的一个接口。View通常含有Presenter的引用。在Android开发中通常将Activity或者Fragment作为View层。
Model: 对于Model层也是数据层。它区别于MVC架构中的Model,在这里不仅仅只是数据模型。在MVP架构中Model它负责对数据的存取操作,例如对数据库的读写,网络的数据的请求等。
Presenter:对于Presenter层他是连接View层与Model层的桥梁并对业务逻辑进行处理。在MVP架构中Model与View无法直接进行交互。所以在Presenter层它会从Model层获得所需要的数据,进行一些适当的处理后交由View层进行显示。这样通过Presenter将View与Model进行隔离,使得View和Model之间不存在耦合,同时也将业务逻辑从View中抽离。

MVP的优点
MVP分离了view和model层,Presenter层充当了桥梁的角色,View层只负责更新界面即可,这里的View我们要明白只是一个viewinterface,它是视图的接口,这样我们在做单元测试的时候可以非常方便Presenter代码。
厚重的Controller层代码也得到了释放尽管大家会将Service层做分离,如net层,DB层等,但还是无法避免类似的问题,activity uicontroller无法重复利用是非常难以忍受的。
有一点还需要注意,presenter是双向绑定的关系,因此,在设计的时候就要注意接口和抽象的使用,尽可能的降低代码的耦合度,这也是mvp的宗旨。

MVP实例
这里我编写了一个非常简单的MVP程序,该程序就是在界面点击按钮后显示一条文本信息。首先看一下整体的架构

bean包

package com.example.mvpapplication.bean;

/**
* Created by 刘航伸 on 2017/6/26.
* 所展示数据的实体类
*/

public class Info {
private String content;

public Info(String content){
    this.content = content;
}

public void setContent(String content){
    this.content = content;

}

public String getContent(){
    return this.content;
}

}

presenter包

package com.example.mvpapplication.presenter;

import com.example.mvpapplication.bean.Info;
import com.example.mvpapplication.view.ShowInfo;

/**
 * Created by 刘航伸 on 2017/6/26.
 * presenter的具体实现类,封装了该程序的业务逻辑
 * 这里只是简单展示信息
 */

public class ShowInfoPresenter {
    private Info info;
    private ShowInfo showInfo;

    public ShowInfoPresenter(ShowInfo showInfo) {

        this.showInfo = showInfo;
    }

    public void showInfo(){
        info = new Info("MVP架构实例");
        showInfo.showInfo(info);
    }
}

view包

package com.example.mvpapplication.view;

import com.example.mvpapplication.bean.Info;

/**
 * Created by 刘航伸 on 2017/6/26.
 */

public interface ShowInfo {
    public void showInfo(Info info);
}

package com.example.mvpapplication.view;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.example.mvpapplication.R;
import com.example.mvpapplication.bean.Info;
import com.example.mvpapplication.presenter.ShowInfoPresenter;

/**
* Created by 刘航伸 on 2017/6/26.
*/

public class ShowInfoImpl extends Activity implements ShowInfo,View.OnClickListener{
private Button showInfoButton;
private TextView textView;
private ShowInfoPresenter showInfoPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showInfoButton = (Button)findViewById(R.id.showInfoButton);
textView = (TextView)findViewById((R.id.textView));
showInfoPresenter = new ShowInfoPresenter(this);

}


@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.showInfoButton:
            showInfoPresenter.showInfo();
    }
}

@Override
public void showInfo(Info info) {
    textView.setText(info.getContent());
}

}

“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值