首页 > 其他分享 >1、Android中MVC、MVP和MVVM架构模式的区别

1、Android中MVC、MVP和MVVM架构模式的区别

时间:2023-06-17 14:07:45浏览次数:51  
标签:MVP MVVM 模型 应用程序 MVC 视图

架构模式为项目文件提供了模块化,并确保所有的代码在单元测试中得到覆盖。它使开发人员很容易维护软件,并在未来扩展应用程序的功能。MVC(模型-视图-控制器)、MVP(模型-视图-展示者)和MVVM(模型-视图-视图模型)是开发人员中最流行和行业公认的安卓架构模式。

模型-视图-控制器(MVC)模式

MVC模式建议将代码分成三个部分。在创建应用程序的类/文件时,开发人员必须将其分为以下三层之一。


 


  • 模型:这个组件存储应用程序的数据。它对接口没有了解。模型负责处理领域逻辑(现实世界的业务规则)以及与数据库和网络层的通信。
  • 视图:它是UI(用户界面)层,持有在屏幕上可见的组件。此外,它提供了存储在模型中的数据的可视化,并向用户提供交互。
  • 控制器:这个组件建立了视图和模型之间的关系。它包含了核心的应用逻辑,得到用户的响应,并根据需要更新模型。

模型-视图-演示器(MVP)模式

MVP模式克服了MVC的挑战,并提供了一种简单的方法来构造项目代码。MVP被广泛接受的原因是它提供了模块化、可测试性,以及一个更干净和可维护的代码库。它由以下三个部分组成 –

  • 模型:用于存储数据的层。它负责处理领域逻辑(现实世界的业务规则)以及与数据库和网络层的通信。
  • 视图:UI(用户接口)层。它提供数据的可视化,并跟踪用户的动作,以便通知演示者。
  • 展示器:从模型中获取数据并应用UI逻辑来决定显示什么。它管理视图的状态,并根据用户从视图的输入通知采取相应的行动。

模型-视图-ViewModel(MVVM)模式

MVVM模式与MVP(Model – View – Presenter)设计模式有一些相似之处,因为Presenter角色是由ViewModel扮演的。然而,MVVM已经解决了MVP模式的缺点。它建议将数据表现逻辑(视图或用户界面)与应用程序的核心业务逻辑部分分开。MVVM的独立代码层是。

  • 模型:这一层负责数据源的抽象化。模型和ViewModel一起工作来获取和保存数据。
  • 视图:这一层的目的是通知ViewModel关于用户的操作。该层观察ViewModel,不包含任何类型的应用逻辑。
  • 视图模型:它暴露了那些与视图相关的数据流。此外,它作为模型和视图之间的链接。

MVC、MVP和MVVM设计模式的区别

MVC(模型-视图-控制器)

MVP(模型视图展示者)

MVVM(模型-视图-模型)

最古老的软件架构之一,作为软件架构的第二次迭代而发展,是MVC的进步。

业界公认的应用程序的架构模式。

 

UI(视图)和数据访问机制(模型)是紧密耦合的。

它通过使用Presenter作为Model和View之间的通信渠道,解决了View的依赖问题。

这种架构模式是更多的事件驱动的,因为它使用数据绑定,从而使核心业务逻辑与视图容易分离。

控制器和视图以一对多的关系存在。一个控制器可以根据需要的操作选择不同的视图。

在Presenter和View之间存在一对一的关系,因为一个Presenter类一次管理一个View。

多个视图可以被映射到一个ViewModel上,因此,视图和ViewModel之间存在一对多的关系。

视图没有关于控制器的知识。

视图有对Presenter的引用。

视图有对ViewModel的引用

由于代码层是紧密耦合的,所以很难进行更改和修改应用程序的功能。

代码层是松散耦合的,因此很容易对应用代码进行修改/变更。

容易对应用程序进行修改。然而,如果数据绑定逻辑过于复杂,调试应用程序就会有点困难。

用户输入是由控制器处理的。

视图是应用程序的入口

视图接受用户的输入并作为应用程序的入口。

只适合于小规模的项目。

适合简单和复杂的应用。

不适合小规模的项目。

对单元测试的支持有限。

很容易进行单元测试,但视图和演示器的紧密结合会使其略显困难。

单元测试能力在这个架构中是最高的。

这个架构对Android APIs的依赖性很高。

它对Android APIs的依赖性很低。

对Android API的依赖性较低或没有依赖性。

它不遵循模块化和单一责任原则。

遵循模块化和单一责任原则。

遵循模块化和单一责任原则。


 

 



标签:MVP,MVVM,模型,应用程序,MVC,视图
From: https://blog.51cto.com/u_14625481/6504758

相关文章

  • SpringMVC基础详解(包含示例)
    SpringMVC简介SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,跟Spring,Mybatis框架并称为SSM。是由Spring官方提供的基于MVC设计理念的web框架也是基于Servlet封装的用于实现MVC控制的框架,实现前端和服务端的交互与Servlet技术功能相同,均是......
  • 使用MockMvc测试 Controller
    使用MockMvc可以做到controller层的测试。如果直接得到controller,然后调用指定的方法是不会通过拦截器等外层组件的,使用mockMvc可以。packagecom.lomi.mockMvc;importcn.hutool.json.JSONUtil;importcom.lomi.controller.TestController;importcom.lomi.entity.Goods;im......
  • MySql的MVCC机制
    事务隔离级别遗留问题:在读已提交的级别下,事务B可以读到事务A持有写锁的的记录,且读到的是未更新前的,为何写读没有冲突?可重复读级别,事务B可以更新事务A理论上应该已经获取读锁的记录,且更新后,事务A依然可以读到数据,为何读-写-读没有冲突? 在可重复读级别,幻读没有产生......
  • 三种架构模式简介(MVC、MVP、MVVM)
    一简介手机终端随着每年的更新换代,其性能也飞速增长。依附于此的Android应用规模也愈发复杂。截止2023年4月,最新版本8.0.32微信apk大小为238MB,而对比2011年微信1.0版本apk包大小仅为457KB,短短12年增长了533倍。随着应用规模增大,功能扩展困难、测试规......
  • MVVM开发模式+双向数据绑定及扩展
    一、MVVM开发模式(1)前端的视图层概念=》由MVC演化(2)M:model【模型层】:渲染页面所以来的数据源(通过ajax从服务端获取的数据)  V:view【视图层】:将数据模型转换成UI展示给用户  VM:【视图模型层】:当监听到DOM变化时,会自动地更新数据源里面所依赖的数据......
  • 如何快速做出产品MVP
    两个月前,我在生财有术分享了《如何获得产品idea》。下一步,就是把idea变成MVP。今天我们聊聊,如何快速做出MVP。一、为什么需要快速做出产品MVP?因为新产品的失败率太高了。为了提高整体成功率,我们只能增加数量。我们只能不断地尝试新的idea,这是所有创新者共同的宿命。在这样......
  • node express mvc router 简单目录结构笔记
          只用来参考的  app.jsconstexpress=require('express');constmorgan=require('morgan');consttourRouter=require('./routes/tourRoutes');constuserRouter=require('./routes/userRoutes');constapp=e......
  • MVC 模式和三层架构
    1.MVC模式‍MVC模式和三层架构是一些理论的知识,将来我们使用了它们进行代码开发会让我们代码维护性和扩展性更好。‍MVC是一种分层开发的模式,其中:M:Model,业务模型,处理业务V:View,视图,界面展示C:Controller,控制器,处理请求,调用模型和视图​​‍控制器(serlvlet)用来接收浏......
  • 通用mapping实现的SSM项目:SSM 框架:是 Spring + Spring MVC + MyBatis
    1.结合通用mapping实现的SSM项目:SSM框架:是Spring+SpringMVC+MyBatis的缩写mybatisgenerator:配置插件通用mapper:tk.mybatis2.MyBatis逆向工程组件是MyBatisGenerator,简称MBG,是专为MyBatis框架制定代码自动生成解决方案,MBG可以根据数据表结构快速生成对应的实体类......
  • spring-mvc3 源码分析
    1,进入sevlet的service方法publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException{HttpServletRequestrequest;HttpServletResponseresponse;try{request=(HttpServletRequest)req;......