MVP框架设计详解

MVP

MVP——全场最有价值球员…… 啊呸!

MVP——Model-View-Presenter分层框架模式,可以说这是MVC框架设计的变形体,事实上这两种框架也存在很多的相同点。分层方式也是将Controller改成了Presenter,当然,各层内部的定义以及相互之间的关系也做了很大改变,与MVC的区别也就体现在这里。

MVP简介

  老规矩,拆看慢慢讲。MVP分为Model、View、Presenter三层:

  Model作为模型层,在MVP中更偏向于功能的模型;

  View作为视图层,这一点和MVC基本没有差别,代表着布局和控件;

  Presenter作为主持层,也就是主持着View与Model之间的交互。

  MVP框架中,断绝了View与Model之间的直接交互,成功的减少了Activity中的臃肿代码,使得Activity能够保持整洁清晰。这一次除了讲解各层之外,还会和MVC中相同的层做个对比,毕竟刚开始从MVC转换到MVP还是很容易跑偏的。与MVC最直观的不同,MVP中定义接口完成联系。

Model

  Model是MVP中的模型层,在MVP中,通常我会用来定义功能。而在MVC中,Model的主要部分就在于Domain的定义,由于Activity中交缠了太多的东西,mvc虽然常常在分包时显得清晰,但事实上的编码部分却非常的复杂。而MVP部分将Model的职责定义的更加清晰,也就让各层的就够更加明显易见。

在这里我就用登录(Login)作为实例。

'首先是接口'
public interface LoginModel{
   

    //用于回调登录进程
    interface LoginListener{

        void onLogining();

        void onSuccess();

        void onFaield()
    }

    void login(String username, String password, OnLoginListener listener);

}


'接着是实现部分'
public class LoginModelImpl implements LoginModel{
   

    public void login(String username, String password, OnLoginListener listener){

        //登录逻辑...    

        listener.onLogining();

        if(....)
            listener.onSuccess();

        if(....)
            listener.onFaield();
    }
}

 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

  先从定义的接口讲起,LoginModel作为接口定义Login这一功能模型,同时在接口中定义一个接口,用于监听登录的过程,作为回调使用。

  之后是接口实现,在实现类中完成功能的实现,并且在过程中根据不同情况进行回调操作。

  从这里可以初步看出,MVP模式是将各层更加清晰的进行分离了。Model的主要工作就是进行功能执行,其余的工作将会交付给Presenter完成。


View

  MVP中的View层(视图层)和MVC没有太大差别,同样是由xml文件以及Activity/Fragment完成。

  不同点在于: 
    1. MVP中的View层添加了接口定义部分 
    2. MVP中的View层不再与Model层直接进行交互,不然就不清真了。呸!不然就不解耦了。

来看一下View层中的接口定义:

public interface LoginView{
    void showProgress();

    void hideProgress();

    void inputError(String error);
}
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

  可以看出,在LoginView中定义的方法都是和显示有关的方法,也就是涉及到Login这一过程中将会出现的几种View表现方式。接口中所定义的所有方法,最终都是由Activity来实现的,所以在接口中的方法应该尽量考虑好参数与返回值。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值