MVP-MVVM

MVP

Model

Model提供用户界面需要显示的数据,包括从服务器获取数据、从本地缓存获取数据等数据操作。

View

View层应该尽量的精简,负责显示数据和用户交互。MVP下Activity和Fragment体现在了这一层,Activity一般也就做加载UI视图、设置事件监听再交由Presenter处理的一些工作,所以也就需要持有相应Presenter的引用。

Presenter

Presenter层处理程序的业务逻辑,收到View层UI上的反馈、系统反馈等指令后分发处理逻辑交由业务层做具体的业务操作,然后将得到的数据给View层展示。

优缺点
优点
  • 解耦,实现了Model和View真正的完全分离。

  • 模块职责划分明显,层次清晰,方便调试,不容易出bug. 而且各模块之间只暴露接口,可供多名开发者同步开发。

  • Presenter可以复用,一个Presenter可以用于多个View.

  • 易于进行单元测试,Android中的单元测试一直以来都是一个难题,其中一个原因就是View层的测试比较难写,引入MVP后,由于Presenter只持有View的接口,那就可以通过Mock View来测试业务逻辑,不用依赖真正的Android控件。

缺点
  • Android中的View层不够纯粹,Activity和Fragment和Android系统API紧密相关,例如生命周期回调,本不应该属于View层,而应该由Presenter层处理,使用MVP就需要手动将生命周期回调处理交给Presenter层代理。

  • Presenter中除了业务逻辑以外,还有大量的View->Model,Model->View的手动同步逻辑,造成Presenter比较笨重,维护起来会比较困难。

  • 由于对View的渲染放在了Presenter中,所以View和Presenter的交互会过于频繁。

  • 如果Presenter过多地渲染了View,往往会使得它与特定的View的联系过于紧密。一旦View需要变更,那么Presenter也需要变更了。

  • 额外的代码复杂度及学习成本。

MVVM

Android中实现MVVM, 需要依赖官方提供的DataBinding库。DataBinding提供了View和数据的双向绑定,正向:View监听数据的改变自我渲染。反向:View将用户操作之后的数据反向注入给数据层。

Model

和MVP一致

View

监听数据的变化自我渲染,并且将与用户交互的事件反馈给ViewModel层处理。

ViewModel

用可监听的对象对View层所需的数据进行包装,并且处理View层传递的用户交互事件,ViewModel并不持有View, 而是通过注解接收View层的事件。

优缺点
优点
  • MVVM 使得 View 和逻辑层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了 Activity 的压力。

  • 逻辑层完全没有持有 View,后台异步任务也就不需要持有 View, 避免出现内存泄漏。

  • 单元测试更加简单,ViewModel层完全没有持有View, 所以不需要mock view, 只需要测试当数据发生改变时,Observable variables的表现即可。

缺点
  • 数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。

  • 数据双向绑定不利于代码重用。客户端开发最常用的重用是View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同模块的model都不同。那就不能简单重用View了。

  • 更加大的学习成本

推荐阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVPMVVM是两种常见的软件架构模式。MVP即Model-View-Presenter,MVVM即Model-View-ViewModel。它们在设计和组织代码上有一些不同之处。 首先,MVP着重于将应用程序分为三个主要部分:Model、View和Presenter。Model负责数据的处理和存储,View负责展示用户界面,而Presenter则负责处理视图和模型之间的通信和交互。这种架构模式强调了视图和模型的分离,通过Presenter来进行中介。 相比之下,MVVM也是将应用程序分为三个部分:Model、View和ViewModel。ViewModel是MVVM的核心,它负责管理视图所需的数据和逻辑。ViewModel将Model中的数据映射到View上,并通过双向数据绑定来保持数据的同步。这样,当数据发生变化时,View会自动更新。 在使用上,MVPMVVM在代码结构上有所不同。MVP中,View和Presenter是紧密耦合的,View通过接口来与Presenter进行交互。而MVVM中,View和ViewModel是通过数据绑定进行绑定的,它们之间的交互更加松散。 此外,MVPMVVM在代码总量和性能方面也有一些差异。MVP在一定程度上会增加代码的总量,因为需要编写额外的接口和Presenter类。而MVVM通过数据绑定减少了一些手动的代码编写,但如果使用不当,可能会带来性能问题。 综上所述,MVPMVVM是两种不同的架构模式,各有优劣。MVP更加注重视图和模型的分离,而MVVM通过数据绑定来实现视图和模型的同步。在选择使用哪种模式时,需要根据项目的需求和开发团队的经验做出决策。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [热门前沿知识相关面试问题-MVC/MVP/MVVM架构设计模式面试问题详解](https://blog.csdn.net/weixin_30443813/article/details/95706442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue相关面试题:MVC,MVP,MVVP三种设计模式的区别](https://blog.csdn.net/xiaolu567/article/details/126239843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值