Android 架构MVC MVP MVVM+实例(上)

简介: 前言MVC是什么?Android中的MVC含义工作原理MVC的缺点MVP是什么Android中的MVP含义工作原理MVP的优点MVP的缺点MVVM是什么Android中的MVVM含义工作原理MVVM的优点MVVM的缺点MVP和MVC的最大区别如何选取框架

前言




    MVC、MVP和MVVM是软件比较常用的三种软件架构,这三种架构的目的都是分离,避免将过多的逻辑全部堆积在一个类中。


       在Android中,Activity中既有UI的相关处理逻辑,又有数据获取逻辑,从而导致Activity逻辑复杂不单一难以维护。


       为了一个应用可以更好的维护和扩展,我们需要很好的区分相关层级,要不然以后将数据获取方式从数据库变为网络获取时,我们需要去修改整个Activity。架构 使得View和数据相互独立,我们把应用分成三个不同层级,这样我们就能够单独测试相关层级,使用架构能够把大多数逻辑从Activity中移除,方便进行单元测试。


MVC是什么?


       MVC是模型(Model)-视图(View)-控制器(Controller)的缩写,用一种业务逻辑、数据、界面显示分离的方法组织代码。其实Android Studio创建一个项目的模式就是一个简化的mvc模式。


Android中的MVC含义


  • Model:实体类(数据的获取、存储、数据状态变化)。


  • View:布局文件


  • Controller:Activity(处理数据、业务和UI)。


工作原理

微信图片_20220521175857.png


  • 1.View接受用户的交互请求。


  • 2.View将请求转交给Controller。


  • 3.Controller操作Model进行数据更新。


  • 4.数据更新之后,Model通知View数据变化。


  • 5.View显示更新之后的数据。


MVC的缺点


       随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。


      为了解决MVC的缺点,MVP 框架被提出来。


MVP是什么


       MVP是MVC架构的一个演化版,全称是Model-View-Presenter。将MVC中的V和C结合生成MVP中的V,引入新的伙伴Presenter。


Android中的MVP含义


  • Model:实体类(数据的获取、存储、数据状态变化)。


  • View:布局文件+Activity。


  • Presenter:中介,负责完成View与Model间的交互和业务逻辑。


工作原理


微信图片_20220521180013.png

  • 1.View 接收用户交互请求


  • 2.View 将请求转交给 Presenter(V调用P接口)


  • 3.Presenter 操作Model进行数据更新(P调用M接口)


  • 4.Model 通知Presenter数据发生变化(M调用P接口)


  • 5.Presenter 更新View数据(P执行接口,V相应回调)


MVP的优点


  • 1.复杂的逻辑处理放在Presenter进行处理,减少了Activity的臃肿。


  • 2.解耦。Model层与View层完全分离,修改V层不会影响M层,降低了耦合性。


  • 3.可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。


  • 4.Presenter层与View层的交互是通过接口来进行的,便于单元测试。


MVP的缺点


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


MVVM是什么


       是 Model-View-ViewModel 的简写。MVVM 与MVP的结构还是很相似的,就是将Presenter升级为ViewModel。在MVVM中,View层和Model层进行了双向绑定(即Data Binding),所以Model数据的更改会表现在View上,反之亦然。ViewModel就是用来根据具体情况处理View或Model的变化。


Android中的MVVM含义


  • Model:实体类(数据的获取、存储、数据状态变化)。


  • View:布局文件+Activity。


  • ViewModel: 关联层,将Model和View进行绑定,Model或View更改时,实时刷新对方。


工作原理

微信图片_20220521180204.png


  • 1.View 接收用户交互请求


  • 2.View 将请求转交给ViewModel


  • 3.ViewModel 操作Model数据更新


  • 4.Model 更新完数据,通知ViewModel数据发生变化


  • 5.ViewModel 更新View数据


View/Model的变动,只要改其中一方,另一方都能够及时更新到


MVVM的优点


  • 1.提高可维护性。Data Binding可以实现双向的交互,使得视图和控制层之间的耦合程度进一步降低,分离更为彻底,同时减轻了Activity的压力。


  • 2.简化测试。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确。大大减少了对View同步更新的测试。


  • 3.ViewModle易于单元测试。


MVVM的缺点


  • 1.对于简单的项目,使用MVVM有点大材小用。


  • 2.对于过大的项目,数据绑定会导致内存开销大,影响性能。


  • 3.ViewModel和View的绑定,使页面异常追踪变得不方便。有可能是View出错,也有可能是ViewModel的业务逻辑有问题,也有可能是Model的数据出错。


MVP和MVC的最大区别


       在MVP中View并不直接使用Model,它们之间的通信是通过Presenter 来进行的,所有的交互都发生在Presenter内部,而在MVC中View直接从Model中读取数据而不是通过 Controller。


如何选取框架


       本来是要每个模式写一个适用场景,最后想想每个人都有自己的理解,别被他人束缚了。


       一句话:适合自己的才是最好的!


相关文章
|
6月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
1134 1
|
9月前
|
存储 缓存 分布式计算
高内存场景必读!阿里云r7/r9i/r8y/r8i实例架构、性能、价格多维度对比
阿里云针对高性能需求场景,一般会在活动中推出内存型r7、内存型r9i、内存型r8y和内存型r8i这几款内存型实例规格的云服务器。相比于活动内的经济型e和通用算力型u1等实例规格,这些内存型实例在性能上更为强劲,尤其适合对内存和计算能力有较高要求的应用场景。这些实例规格的云服务器在处理器与内存的配比上大多为1:8,但它们在处理器架构、存储性能、网络能力以及安全特性等方面各有千秋,因此适用场景也各不相同。本文将为大家详细介绍内存型r7、r9i、r8y、r8i实例的性能、适用场景的区别以及选择参考。
|
12月前
|
存储 弹性计算 运维
阿里云通用算力型U1实例怎么样?u1实例技术架构、场景适配与优惠价格参考
阿里云服务器ECS 通用算力型u1实例2核4G,5M固定带宽,80G ESSD Entry盘,企业用户专享优惠价格199元1年,很多用户关心这个款云服务器怎么样?阿里云通用算力型U1实例自推出以来,凭借独特的"均衡算力+智能调度"设计理念,在IaaS市场开辟出差异化的竞争赛道。本文将通过技术架构解析、典型场景适配分析、全生命周期成本测算三个维度,全面解构这款热门云服务器实例的核心价值,以供参考和选择。
|
12月前
|
存储 开发框架 缓存
YashanDB实例架构
YashanDB实例架构
|
12月前
|
人工智能 前端开发 Java
DDD四层架构和MVC三层架构的个人理解和学习笔记
领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
|
Android开发 开发者 Kotlin
Android实战经验之Kotlin中快速实现MVI架构
MVI架构通过单向数据流和不可变状态,提供了一种清晰、可预测的状态管理方式。在Kotlin中实现MVI架构,不仅提高了代码的可维护性和可测试性,还能更好地应对复杂的UI交互和状态管理。通过本文的介绍,希望开发者能够掌握MVI架构的核心思想,并在实际项目中灵活应用。
570 8
|
开发工具 Android开发 iOS开发
Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
本文旨在深入探讨Android与iOS两大移动操作系统在技术架构、开发环境及市场表现上的核心差异,为开发者和技术爱好者提供全面的视角。通过对比分析,揭示两者如何塑造了当今多样化的移动应用生态,并对未来发展趋势进行了展望。 ####
|
网络协议 Linux Android开发
深入探索Android系统架构与性能优化
本文旨在为读者提供一个全面的视角,以理解Android系统的架构及其关键组件。我们将探讨Android的发展历程、核心特性以及如何通过有效的策略来提升应用的性能和用户体验。本文不包含常规的技术细节,而是聚焦于系统架构层面的深入分析,以及针对开发者的实际优化建议。
429 21
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
XML 前端开发 测试技术
Android基础知识:解释Android的MVC和MVP模式。
Android基础知识:解释Android的MVC和MVP模式。
261 0