2024年安卓最新MVC MVP与MVVM对比分析,2024年最新Android面试心得必备技能储备详解

写在最后

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。

如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!

加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

image-20210508174516067.png

被动模式与主动模式相比,它的缺点主要是View无法感知Model的变化,而需要通过Controller来间接地通知更新。但同时它也是一个优点,Controller可以更好地控制View的更新,而不必担心Model主动通知变化而产生同步问题。

MVC的核心思想是表现层分离,即将领域模型和视图模型分离。在MVC中,领域模型是Model,视图模型是View与Controller协作的整体。Controller不仅负责操作Model进行业务逻辑处理,还负责进行View相关的界面展示处理,其中包括View的处理细节,因此,我们可以说Controller肩负着过重的责任,只适用于小型的app,应用于大型app时,会出现Massive View Controller(过重的视图控制器)的问题。

MVP

Model-View-Presenter 模型-视图-主持人,三层架构模式。

  • Mode层:模型层,负责数据处理,包括网络数据和持久化数据的获取、加工等,在Android中典型的实现时数据结构的定义类,与MVC中Model类似。
  • View层:视图层,负责处理界面绘制,向用户展示Model数据,在Android中典型实现为Activity/Fragment等。
  • Presenter层:主持人层,模型和视图的“中介“。视图层将用户交互响应事件传递给Presenter,Presenter进行数据处理,并通知View进行数据展示等操作。

在MVP模式中,Presenter层可以依赖View层和Model层,充当沟通的桥梁。View层的事件传递流经过Presenter层操作Model进行业务逻辑处理。Model层数据处理完成会通知Presenter层,Presenter层再与View层进行沟通。Presenter层与View、Model之间是双向数据流,而View与Model之间没有直接联系。MVP模型如下图所示:

image-20210510182059436.png

MVP的核心思想,除了有与MVC相同的表现层分离外,还有面向接口编程和德莫忒尔定律。

面向接口编程是将类中的方法提炼出来成为接口,由实现类实现该接口,而调用方通过接口与实现类进行交互。面向接口编程的优点:

  • 易于解耦,使组件之间减少依赖
  • 有利于提升模块扩展性
  • 有利于提升代码可维护性
  • 使程序结构更加清晰,增强代码可读性

在Android的MVP开发中,经常使用一种协议类-Contract,将View与Presenter之间的接口建立协议关联关系。Contract接口中包含View和Presenter接口。

德莫忒尔定律其实就是“高内聚低耦合”的设计思想。

MVP与MVC的区别主要在于“C”与“P”的区别和各自产生的事件流。

  • 在MVP模式中,Presenter只通知View进行展示,View展示逻辑由View自己控制,符合德莫忒尔定律;而在MVC模式中,由Controller控制View的展示逻辑,不符合德莫忒尔定律。
  • MVP为面向接口编程,Presenter与View的通信通过接口;而在MVC模式中Controller直接操作View。
  • 在MVP模式中,View与Model之间无法进行通信,而在MVC的主动模式中,Model的变化可以直接通知给View。
  • MVP更有利于单元测试,而MVC组件之间依赖性较强,不利于单元测试。

MVP存在的问题:

  • Presenter责任过重:相比MVC,MVP模式中Presenter交出View的实现细节控制权,而只负责业务逻辑,但责任依然过重;
  • 业务逻辑无法服用:传统MVP模式中,一个View对应一个Presenter,Presenter中业务逻辑只能为一个View服务,不能复用于多个模块之间,不同模块为了实现同样的业务逻辑,会多次重复操作导致大量冗余代码;
  • 急剧扩增的接口数量:MVP采用面向接口编程,在进行业务迭代时,因发生变化而修改既有代码,往往需要连同修改接口层,而新增开放方法需要声明在接口中。

MVVM

Model-View-ViewModel 模型-视图-视图模型。

  • Model层:模型层,负责数据处理,包括网络数据和持久化数据的获取、加工等,在Android中的典型实现一般为数据结构的定义类,与MVCHE MVP中的Model层类似;
  • View层:视图层,负责处理界面绘制,向用户展示Model数据,在Android中的典型实现一般为Activity/Fragment等;
  • ViewModel层:视图模型层,负责处理业务逻辑相关的数据操作,不会与View产生依赖关系,在Android中,可以通过官方提供的DataBinding库实现视图层和模型层数据的双向绑定而不需要ViewModel层通知View层相关的数据变化。

MVVM架构模型图如下:

image-20210511153844923.png

MVVM的核心思想:

  • 进一步解耦:无论是MVC的Controller,还是MVP的Presenter,它们都会与View发生直接或者间接的依赖关系,通过Controller/Presenter来协调View和Model之间的交互,虽然MVP使用面向接口编程间接地将View与Model解耦,但并没有解决本质问题,而且还导致了接口数量和复杂度的增长。在MVVM中,ViewModel不会再持有View的引用,而是通过双向绑定机制来实现数据变化后的视图更新,它不再关心数据应该何时或者如何展示在视图上,一切都由双向绑定机制来完成,所以,MVVM在解耦程度上更进了一步。
  • 基于观察者模式的数据驱动:数据驱动编程是编程范式中的一种,它关注数据的变化,从数据中引发其他组件的变化,是一种基于事件的编程,本质是观察者模式。数据驱动可以阻止数据与功能之间产生耦合,也可以在一定程度上提高开发效率。

最后

**要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!*

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值