Android解读MVC,MVP,MVVM的优缺点

相信很多Android小伙伴在面试的时候都会遇到这个问题,小赵在面试的过程中很多的面试官都会提到,这个问题回答的好,可能加不了太多的分,但是答的差的话,我感觉基本上可以说拜拜了,所以说能咱们还是需要再仔细的了解一下,不要因为失误错过每一次的机会,同时在咱们开发的过程中呢,也需要咱们去选择不同的框架来面对不同的项目。

首先呢,咱们肯定先来说最简单的MVC:

  1. MVC分为Model,View,Controller这三块

    • 模型(Model):负责数据处理和业务逻辑。
    • 视图(View):负责展示数据和用户界面。
    • 控制器(Controller):负责协调模型和视图之间的通信。

    优点:

    • 单一职责原则:模型、视图和控制器之间的责任明确,便于维护和调试。
    • 可扩展性:能够方便地添加新的视图或更改业务逻辑。
    • 可测试性:因为各个部分职责分离,可以更容易地进行单元测试。

    缺点:

    • 视图与控制器之间的耦合度较高,不易于重用视图或更换控制器。
    • 控制器负责处理用户输入和管理视图更新,可能导致控制器变得庞大和复杂。

对于优缺点已经很明显了,其次小赵建议的在一些迭代较少,项目需求少的小项目中使用该框架,因为随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。

适用情况:MVC 模式适合小型项目或者快速开发的原型验证阶段。在这样的情况下,简单的架构可以帮助快速构建应用。

特点:MVC 模式相对简单,模型、视图和控制器之间的分离程度较低,对于一些简单的应用来说比较适用。

接下来在说一下MVP的优缺点:

  1. MVP(Model-View-Presenter):

    • 模型(Model):负责数据处理和业务逻辑。
    • 视图(View):负责展示数据和用户界面。
    • 展示者(Presenter):负责响应用户输入并协调模型和视图之间的通信。

    优点:

    • 视图与业务逻辑的分离:视图只负责展示数据,业务逻辑由展示者处理,有助于降低视图的复杂性。
    • 可测试性:由于业务逻辑在展示者中,可以更容易地对展示者进行单元测试。
    • 良好的可扩展性:可以方便地添加新的视图和展示者。

    缺点:

    • 视图与展示者之间的交互可能会变得复杂。
    • 展示者需要手动处理视图的状态保存和恢复。

咱们在使用中对 UI 的操作必须在 Activity 与 Fragment 的生命周期之内,更细致一点,最好在 onStart() 之后 onPause()之前,否则极其容易出现各种异常,内存泄漏。既然咱么说到了MVP造成的内存泄漏咱们又该如何去解决呢?

Mvp模式在封装的时候会造成内存泄漏,因为presenter层,需要做网络请求,所以就需要考虑到网络请求的取消操 作,如果不处理,activity销毁了,presenter层还在请求网络,就会造成内存泄漏。只要presenter层能感知activity生命周期的变化,在activity销毁的时候,取消网络请求,就能解决这个问题。

适用情况:MVP 模式适合中等规模的项目,尤其是对测试驱动开发(TDD)有需求的团队。MVP 带来的单元测试方便、视图与逻辑分离,可以使代码更具有扩展性和可测试性。

特点:MVP 模式将视图抽象成接口,因此更容易进行单元测试,Presenter 负责处理业务逻辑和和视图交互,更符合单一职责原则。

最后呢在说一下MVVM:

  1. MVVM(Model-View-ViewModel):

    • 模型(Model):负责数据处理和业务逻辑。
    • 视图(View):负责展示数据和用户界面。
    • 视图模型(ViewModel):负责管理视图的状态和提供数据绑定。

    优点:

    • 数据绑定:通过数据绑定,视图和视图模型之间的通信更加自动化和方便。
    • 可测试性:视图模型的职责是管理状态和提供数据,此部分逻辑易于测试。
    • 可重用性:视图和模型是相互独立的,可以更容易地重用。

    缺点:

    • 学习成本较高:相对于其他模式,MVVM 可能需要更多的学习和实践。
    • 数据绑定可能导致性能问题:视图的更新会过多地依赖于数据绑定的实现。

MVVM它的本质是数据驱动,能够把解耦做的更彻底,viewModel不持有view。View去产生事件,使用ViewModel来进行逻辑处理后,会去通知Model更新数据,Model把更新的数据传递给ViewModel,ViewModel会自动通知View来更新界面,而不是主动的去调用View的方法取更新。LiveData是具有生命周期的可观察的数据持有类。理解它需要注意这几个关键字,生命周期,可观察,数据持有类。DataBinding用来实现View层与ViewModel数据的双向绑定,DataBinding的引入可以提高代码的可读性、可维护性和测试性,并且减轻了原本MVP模式中Presenter的负担,使得代码结构更加清晰和易于管理。

适用情况:MVVM 模式适合中大型的项目,尤其是需要大量数据绑定和复杂的用户界面交互的项目。MVVM 通过数据绑定实现了视图和数据模型之间的自动同步,适用于需要快速开发和快速迭代的项目。

特点:MVVM 模式适合复杂交互模式和大规模数据绑定的场景,可以极大地提高开发效率,同时也需要开发团队对数据绑定等技术有一定了解。

最后总结一下这三个框架,各自有各自的好处,没有最好的项目框架,只有合适与不合适。在实际的开发中咱们需要根据项目去选择框架,对于需求变化频繁、迭代速度快、UI层交互复杂的项目,MVVM 可能更为适合;对于简单的小型项目或者对测试驱动开发有需求的项目,MVP 可能更为合适;而对于快速验证想法的原型项目,MVC 可能是一个合适的选择。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值