Android——开发模式mvc和mvp

MVC模式是一种在开发当中常见的设计模式,通过视图,模型和控制层的拆分设计,使得开发

更加容易,后期也更加好维护

-M:Model(模型)Model主要是各种操作,数据结构,业务逻辑和功能的实现等
-V:View(视图)View就是在layout下的各种布局文件,这个相信很容易理解
-C:Controller(控制器)Controller就是各种Activity或Fragment,这个也很容易

简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,具体见

下图:

这里写图片描述

在开发中怎么设计呢?例如用户登录功能,xml布局文件就是view层,LoginActivity就是

Controller层,model层就是登录的方法,通过btn.setOnClickListener()方法调用model层的

登录方法,就完成了一个登录的功能,这就是MVC的设计模式

但是,有个问题,很多时候我们的需求并不只是简简单单的一个登录功能,还有很多复杂的处

理,比如我们想在登录完成后,把当前的页面的Logo隐藏,又或者替换掉当前页面的背景,按

道理来说,这些关于页面的操作是在布局页面,也就是View层,但是这些都不能再xml中去实

现,只能在Activity中操作,但是Activity是属于Controller层啊,这就导致了Activity既是

Controller层又是View层,讲道理,如果代码越来越多,逻辑越来越复杂,这就很尴尬了,不

禁写的麻烦,维护更加头疼,还有,view层和model层是互通的,这就说明两者存在耦合性,

如果是个大型的项目,显然,这是非常不好的,这就衍生出了MVP设计模式

MVP模式:

什么是MVP模式?MVP模式是MVC模式的进化,解决很多MVC的一些设计缺点,比如耦合性

-M:Model(模型)跟MVC的一样
-V:View(视图)各种Activity或Fragment,这跟MVC的有点差别了
-P:Presenter(主导期)处理用户触发事件,用户事件的转发。

三者关系:

这里写图片描述

相对MVC来言,我们发现,View和Model之间没有直接的联系,而是通过Presenter进行连

接,MVP模式舍去了xml布局所在的层,并把改层放置的是Activity或是Fragment,这样,解

除了MVC的耦合性的问题,对于这三者的沟通,我们主要是通过接口的方式实现,还是以登录

功能为例,首先,我们在Model层以接口形式定义一个登录的方法,然后定义一个类去实现这

个方法,而Presenter则去调用这个方法,然后再View层去调用Presenter的实现方法,就可以

完成了登录的功能,这就避免了耦合性,也大大的优化的代码,也便于后期的维护

示例代码:

这里写图片描述

LoginUtil类:

public interface LoginUtil {    
 void Login(Context context);
}

LoginUtilImp类:

public class LoginUtilImp implements LoginUtil {   
 @Override   
 public void Login(Context context) {      
Toast.makeText(context,"loging",Toast.LENGTH_SHORT).show();    
   }
}

Logining类:

public class Logining {  
  private LoginUtil mLoginUtil;   
  private Context mContext;  
  public Logining(Context context){  
         this.mContext=context;        
         this.mLoginUtil=new LoginUtilImp();   
  }    
  public void login(){       
       mLoginUtil.Login(mContext);   
  }
}

MainActivity类:

mBtnLogin.setOnClickListener(new View.OnClickListener(){  
   @Override 
   public void onClick(View v) {   
     mLogining.login();   
 }
});

总结:

MVC和MVP两者说到底最大的差别就是耦合性,随着APP的功能的增强,View层处理的东西

越来越多了,为了更好地细分视图与模型的功能,所以,MVP设计模式更切近我们的开发,一

个好的项目,往往都是从设计模式开始,

好了,我们来捋一捋。

首先,和MVC最大的不同,MVP把activity作为了view层,通过代码也可以看到,整个activity

没有任何和model层相关的逻辑代码,取而代之的是把代码放到了presenter层中,presenter

获取了model层的数据之后,通过接口的形式将view层需要的数据返回给它就OK了。

这样的好处是什么呢?首先,activity的代码逻辑减少了,其次,view层和model层完全解耦,

具体来说,如果你需要测试一个http请求是否顺利,你不需要写一个activity,只需要写一个

java类,实现对应的接口,presenter获取了数据自然会调用相应的方法,相应的,你也可以自

己在presenter中mock数据,分发给view层,用来测试布局是否正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值