美文网首页
我对MVP的理解

我对MVP的理解

作者: 在巨人的肩膀上努力奔跑 | 来源:发表于2016-10-10 17:21 被阅读183次
MVP模式架构
  • Model:业务逻辑和实体模型
  • View:用户交互及页面展示
  • presenter:Model与View交互的桥梁
MVP结构图

总体来说思路还是比较简单的:

  • 1、view层即我们的Activity,继承抽离出view所有操作方法的接口,并引用presenter。
  • 2、presenter调用model,执行model中具体业务逻辑。
  • 3、model执行具体逻辑,将结果回调给presenter。
  • 4、presenter继续将结果回调给view。
使用MVP模式实现简单的登录实例
项目结构
view层:(继承抽离出view所有操作方法的接口,并引用presenter)
//封装Activity所需要的方法,假设我们需要处理登录成功与登陆失败两种情况
public interface ILoginView {
    //登录成功
    void onLoginSuccess(String successMsg);
    //登录失败
    void onLoginFailed(String errorMsg);
}

Activity实现接口并引用presenter:

public class MainActivity extends AppCompatActivity implements ILoginView {
    private ILoginPresenter presenter;//presenter引用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        presenter.startLogin();//开始登录
    }
    @Override
    public void onLoginSuccess(String successMsg) {
        //UI层接收回调:登录成功
    }
    @Override
    public void onLoginFailed(String errorMsg) {
        //UI层接收回调:登录失败
    }
}
presenter层:(调用model,执行model的具体逻辑)
public class ILoginPresenter {
    private ILoginView view;
    private LoginModel model;
    public ILoginPresenter(ILoginView view){
        this.view = view ;
    }
    //调用model,执行model具体逻辑
    public void startLogin(){
        model = new LoginModel(this);
        model.startLogin();
    }
    //将结果回调给层,因为UI持有View的引用,所以结果回调到了UI层
    public void onLoginSuccess(String successMsg){
        view.onLoginSuccess(successMsg);
    }
    public void onLoginError(String errorMsg){
        view.onLoginFailed(errorMsg);
    }
}
model:实现具体业务逻辑
public class LoginModel {
    private ILoginPresenter iLoginPresenter;
    public LoginModel(ILoginPresenter presenter){
        this.iLoginPresenter = presenter;
    }
    //登录具体逻辑
    public void startLogin(){
        if(true){
            //假设登录成功
            iLoginPresenter.onLoginSuccess("success");//结果回调给presenter
        }else{
            iLoginPresenter.onLoginError("error");//结果回调给presenter
        }
    }
}

总结

从上面的例子可以看出:使用MVP模式会使得代码多出很多接口及Presenter,但是这样使得代码逻辑更加清晰,尤其是在处理复杂逻辑时,可以将Activity每个业务都抽离成一个Presenter,这样即逻辑清晰也方便我们扩展。例子中业务逻辑很简单,使用MVP返回显现代码累赘,所以说,仁者见仁智者见智,我认为根据具体项目情况选择合理的架构模式。

相关文章

  • 我对MVP的理解

    MVP模式架构 Model:业务逻辑和实体模型 View:用户交互及页面展示 presenter:Model与Vi...

  • 谈谈我对 MVP 的理解

    说实话,MVP 这种模式或者说设计思想也已经出来很久了,现在最新的使用的是 MVVM 设计模式,不断对于萌新来说,...

  • 对MVP模型的简单理解

    这里主要是通过看简书上大神的文章和开源项目以后用文字复盘一下自己的理解。笔记早就已经在为知笔记上整理好了,现在发在...

  • 对MVC和MVP的理解

    一、MVC 1、M:model层,数据交互层 2、V:视图层,展示界面 3、C:控制层,一般指activity或者...

  • 对MVVM MVC MVP的理解

    好久没有更过帖了,今天我们来聊一下MVVM ,MVC , MVP 的区别及通信方式 首先来说MVC MVC...

  • 对MVC,MVVM,MVP的理解

    文章借鉴了这位老哥的 MVC 理想的MVC 各层的职责如下所示: Models: 数据层,负责数据的请求和存储以及...

  • iOS 个人对 MVP 的理解

    讲解一下我在使用 Swift 时对MVP模式的理解本人技术有限,但乐于学习如有讲的不对的地方或有更好的方式,欢迎评...

  • MVP的真实含义:选择

    本文主要是我阅读《精益创业》后,结合自己的工作与生活,来聊聊对MVP的理解。 MVP,即最小可行性产品(Minim...

  • 拥有生命周期的Presenter的MVP框架,支持Multi P

    结合自己对MVP的理解,加上个人习惯,整理出这么一份Android MVP框架 通过注解动态注入Presenter...

  • 我的MVP的理解

    没用MVP模式之前 以前在做Android应用的时候,其实并没有多关注自己用的是什么框架。总感觉框架什么的听起来很...

网友评论

      本文标题:我对MVP的理解

      本文链接:https://www.haomeiwen.com/subject/xucvyttx.html