浅谈MVC、MVP

从名称上来看mvc分别是model view controller而mvp是model view presenter,首先两者最大的区别就是到底是谁去渲染布局数据,我们都知道展示界面数据有几个步骤,读取xml渲染界面,请求网络等到数据,把网络数据渲染到布局文件上展示出来,在这个几个步骤中两种框架大不相同 。


两者的区别:

   android中展示界面最重要的就是activity,然后由他去读取xml渲染布局;而Activity在MVP中是View层,在MVC中是Controller层,这是MVC和MVP很主要的一个区别。

    在view层的定义中,mvc中的view指的是xml中的我们常说的控件,而在上边我说过的mvp中的V层则是   activity或者是fragment等。

    控制层的定义,在mvc中顾名思义,C层就是控制层,也就是activity 、fragment等类,他们负责请求数据过来之后渲染布局,发送handler,改变UI等等等等动作,显而易见mvcC层代码两会有很多很多。然而mvp中P层则是控制层,在这一层中不需要做和渲染布局无关的事情,也就是说,在P层中我们可以拿到两个引用对象,M层和V层的两个对象,然后直接对其渲染数据。

    下一个区别,也可以算作根本上的区别,MVC中moudel和view层可以直接交互,什么渲染布局,拿到对象,拿到数据等。而MVP中,这两个层是不可以直接交互的需要通过P层也就是控制层去作为一个纽带,传输这些数据,处理这些数据。这样也就降低了两者的耦合性 。

    下边来说一下代码量的区别,mvc中,综上所述也都明白了在activity中代码量超级多,也就是控制层代码量太多,耦合性超级差, 牵一发而动全身,改动一个小的布局就要去处理两个层中的东西 。而mvp中activity只需要去初始化控件拿到P层的引用,然后去调用相应接口的方法并传入相应的布局对象,然P层去处理即可,但是当你真正使用的时候你会发现一个问题,几乎每一个界面都要出一个P层去控制单独界面,虽然相同界面相同逻辑可以共用,但是这样会导致P层类很多,也就是说会有很多的P类出现,这个也是MVP的一个弊端。

    使用方法,这也是最关心的区别,在mvc中很简单,在activity中定义方法,在本类中或者别的类中拿到引用,直接调用;而在mvp中则是,在P层中定义一个P的接口 ,然后定义接口方法,然后在V层中去创建并实现方法。

这里借用下别家的mvp项目结构,大家一看就明白了:


两者的优点和弊端:

    1,上边提到的一个MVC中C层代码处理过多,一个MVP中P类过多 ;

    2,MVC耦合性太强,MVP很好的解耦;

    3,测试,MVC单元测试成本太高,MVP可以简单的进行单元测试

    4,代码的复用性,MVC中代码复用几乎只存在于复制粘贴,MVP中代码的复用是复用P层代码,相同逻辑可以共用一个P层代码 ;

    5,维护,mvc中代码维护起来很麻烦 ,上前行代码 ,两个星期之后获取你就不知道当时是怎样处理的了,还有些人不喜欢写注释,这样读起来很费劲,但是MVP的话,在框架中分工就是很明确的,所以代码的可读性就会相对提高一点 。

    以上就是我个人的一点小小的见解,如果有分歧和建议请留言谢谢~





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值