深入探讨MVC MVP MVVM

阅读了《安卓进阶之光》和《安卓源码设计模式》,我对MVC MVP MVVM有了更深的理解,接下来我用白话讲解一下Android中三者各自的特点,如有不妥之处希望各位大佬批评指正。

 

1.MVC一种业务逻辑、数据、界面显示分离的方法组织代码。

Model:对应数据部分,存取数据(包括从数据库存取和网络获取等)

View:对应界面显示,响应用户交互事件(View依赖Model)

Controller:处理用户交互事件逻辑,通常负责从视图读取数据然后向模型发送数据

缺点:Model和View耦合(View层既可以和Controller层交互又可以和Model层交互)

        View对应于布局文件能做的事情非常少

        Activity既像View又像Controller,不仅要处理布局文件中的数据绑定操作还要处理事件逻辑

2.MVP

Model:对应数据部分,存取数据(包括从数据库存取和网络获取等)

View:对应于Activity,负责View的绘制以及与用户交互。

Presenter:负责完成View于Model的交互,处理业务逻辑。(View中有一个Presenter,Presenter与View交互通过接口)

优点:减少了Activity职责简化了Activity代码,view层和model层不再相互可知完全的解耦,将复杂的逻辑代码提取到Presenter中进行处理。

优缺点:又攒了一个月的Android面试题

这种的优点就是确实大大减少了Activity的负担,让Activity主要承担一个更新View的工作,然后把跟Model交互的工作转移给了Presenter,从而由Presenter方来控制和交互Model方以及View方。所以让项目更加明确简单,顺序性思维开发。

缺点也很明显:首先就是代码量大大增加了,每个页面或者说功能点,都要专门写一个Presenter类,并且由于是面向接口编程,需要增加大量接口,会有大量繁琐的回调。其次,由于Presenter里持有了Activity对象,所以可能会导致内存泄漏或者view空指针,这也是需要注意的地方。

下面通过一张图对比一下MVC和MVP:

3.MVVM

它和MVP的区别貌似不大,只不过是presenter层换成了viewmodel层,还有一点就是view层和viewmodel层是相互绑定的关系(当View发生改变的时候ViewModel通知Model进行更新数据,同理Model数据更新后ViewModel通知更新View),这意味着当你更新viewmodel层的数据的时候,view层会相应的变动ui如图:

参考文献:

https://blog.csdn.net/jiang19921002/article/details/57130836

https://wapbaike.baidu.com/item/MVC%E6%A1%86%E6%9E%B6/9241230?fr=kg_qa&sc_id=z3OheeC

https://www.cnblogs.com/CVstyle/p/6389990.html

https://blog.csdn.net/jdsjlzx/article/details/51174396

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值