首页 > 其他分享 >三种架构模式简介(MVC、MVP、MVVM)

三种架构模式简介(MVC、MVP、MVVM)

时间:2023-06-13 20:33:23浏览次数:33  
标签:MVP MVVM ViewModel Presenter MVC Model View

一 简介

手机终端随着每年的更新换代,其性能也飞速增长。依附于此的 Android 应用规模也愈发复杂。截止 2023 年 4 月,最新版本 8.0.32 微信 apk 大小为 238MB,而对比 2011 年微信 1.0 版本 apk 包大小仅为 457KB,短短 12 年增长了 533 倍。

随着应用规模增大,功能扩展困难、测试规模大及并行开发难等问题愈发突出。为了从根本上解决这些问题,就需要对应用进行重构,此时应用架构设计就显得尤为重要。

Android 应用架构设计三步走:

  • 现象: 程序代码和资源越来越多,代码耦合度高,扩展、维护及测试困难
  • 手段: 分离代码,提炼模式
  • 结果: 确保应用的稳健性、可测试性和可维护性

下文主要介绍三种常见的架构设计模式 MVC、MVP、MVVM

二 MVC

MVC 全称 Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写。

   
  • View: 负责界面数据的展示,与用户进行交互;对应于 xml布局文件和 java 代码动态 view 部分;
  • Controller: 负责逻辑业务的处理;
  • Model: 负责管理业务数据逻辑,如网络请求、数据库处理和 I/O 的操作等。

MVC 初步解决了 Activity 代码太多的问题,但 Activity 天然不可避免要处理 UI,也要处理用户交互,导致 Activity 里糅合了视图和业务的代码,分离程度不够。

优点:

  • 耦合性较低,生命周期成本低,部署快,适用于快速开发的小型项目

缺点:

  • 不适合中大型项目,View 层和 Controller 层连接过于紧密
  • View 层对 Model 层的访问效率低
  • 一般的高级 UI 页面工具和构造器不支持 MVC 模式

三 MVP

为了将 Activity 中的表现逻辑彻底分离出来,业界提出了 MVP 的设计。

MVP 全称 Model View Controller,是模型(Model)-视图(View)-呈现者(Presenter)的缩写。

 

 

 
  • View: 只负责显示 UI,只与 Presenter 层交互,与 Model 层没有耦合。对应于 ActivityXML
  • Presenter: 负责处理业务逻辑,通过接口回调 View 层;
  • Model: 负责管理业务数据逻辑,如网络请求、数据库处理和 I/O 的操作等。

在 MVP 模式中,Model 与 View 无法直接进行交互,所以 Presenter 层会从 Model 层获得数据,适当处理后交给 View 层进行显示。在 MVP 模式中,Presenter 层将 View 层和 Model 层进行隔离,使 View 和 Model 之间不存在耦合,同时将业务逻辑从 View 层剥离。

优点:

  • 逻辑结构清晰,View 层代码不再臃肿,所有的交互都发生在 Presenter 内部

缺点:

  • View 层和 Presenter 层的交互需要定义接口方法,当交互非常复杂时,需要定义很多接口方法和回调方法,增加维护复杂度
  • Presenter 层 持有 View 层的引用,当用户关闭了 View 层,但 Model 层仍然在进行耗时操作,会有内存泄漏风险

四 MVVM

MVVM 全称 Model View ViewModel,模式改动在于中间的 Presenter 改为 ViewModel,MVVM 同样将代码划分为三个部分:

 

 

  • View: 与 MVP 中 View 的概念相同;
  • ViewModel: 连接 View 与 Model 的中间桥梁,ViewModel 与 Model 直接交互,通过 DataBinding 将数据变化反应给 View;
  • Model: 负责管理业务数据逻辑,如网络请求、数据库处理和 I/O 的操作等。

在实现细节上,View 和 Presenter 从双向依赖变成 View 可以向 ViewModel 发指令,但 ViewModel 不会直接向 View 回调,而是让 View 通过观察者的模式去监听数据的变化,有效规避了 MVP 双向依赖的缺点。

优点:

  • 模块间充分解耦,结构清晰,职责划分清晰
  • 在 MVP 的基础上,MVVM 把 View 和 ViewModel 也进行了解耦

缺点:

  • View 与 ViewModel 的交互分散,缺少唯一修改源,不易于追踪
  • 复杂的页面需要定义多个 MutableLiveData,并且都需要暴露为不可变的 LiveData




标签:MVP,MVVM,ViewModel,Presenter,MVC,Model,View
From: https://www.cnblogs.com/holly8/p/17478672.html

相关文章

  • 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;......
  • Avalonia如何快速使用Prism进行MVVM开发,实现Prism区域导航功能
    新建ViewA和ViewB以及他的ViewModel 创建View和WPF开发是一样的,创建UserControl,注意avalonia里面需要指定DataType的类型。 创建ViewModel,这里面和开发WPF是一模一样的 到App里面取注册Region  到Window里面取写好界面,创建一个Region用于导航 MainWindowVie......
  • Avalonia如何快速使用Prism进行MVVM开发
    Avalonia版本:RC1.1Prism.Avalonia版本:8.1.97.11000-rc1.1创建Avalonia模板  如果没有RC1.1模板的取看下官网文档,更新一下模板的版本GettingStarted-AvaloniaUI 进入App.axaml.cs文件修改,将App的继承由Application改为PrismApplication,实现prism里面的抽象 到......
  • WPF入门教程系列二十八 ——DataGrid使用示例MVVM模式(5)
    WPF入门教程系列目录WPF入门教程系列二——Application介绍WPF入门教程系列三——Application介绍(续)WPF入门教程系列四——Dispatcher介绍WPF入门教程系列五——Window介绍WPF入门教程系列十一——依赖属性(一)WPF入门教程系列十五——WPF中的数据绑定(一)  添加Cl......
  • mysql MVCC 原理
    MVCC的定义MVCC,即多版本并发控制,是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC的目的是为了提高数据库的并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。MVCC的目的在MySQL中,InnoDB......