MVC和MVVM以及MVP的介绍

2024-09-02 15:58
文章标签 介绍 mvc mvp mvvm

本文主要是介绍MVC和MVVM以及MVP的介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

  • 1,MVC、MVVM、MVP都属于框架模式

    • 框架是对软件进行分工,设计模式是对具体问题提出的解决方案,两者有本质的区别
  • 2.MVC模式是面向开发最常用的模式,同时也是最经典的模式

    • 其他的模式还有MTV、MVP、CBD、ORM等等很多
  • 3.所有的其他模式MVVM或者MVP都是在MVC的基础上建立的

    • MVC模式是任何模式的根源,有万变不离其宗之理
  • 4.一个项目并不是只有一个MVC和一个MVVM,而可能是每一个功能每一个界面都对应了一个MVC

    • 所以一个完整的项目是由很多个MVC和MVVM或者MVP组成的
  • 5.目前网络上的水军很多,有很多人混了一年半载开发经验,然后看了一两篇文章就觉得MVC怎么怎么不好,有说MVVM模式多么多么牛逼的,也有说MVP模式多么多么牛逼的

    • 其实这也反映了市场上很多人对框架模式的一知半解的态度
      • 笔者认为,任何一款软件都是在面对不同的功能时针对这几种模式之间有一个良好的权衡,而不是一位的偏袒某一种模式

思考题1:应用软件是由什么组成的?

  • 由展示视图的和对于的逻辑代码组成的
    • 视图对应的就是View层,逻辑代码对于的就是Model层

思考题2:视图和模型之间是直接进行交互的吗?

  • 视图和模型之间并不直接进行交互,而是通过控制器(controller)的协调来进行交互
    • 这就是MVC模式的组成结构:视图(View)、控制器(Controller)、模型(Model)

1.1-MVC模式

这里写图片描述

  • 实例:当用户点击一个按钮,请求网络数据,然后刷新当前taleview

    • 1.首先c层获取用户的点击按钮事件,然后向M层发送指令请求数据

      • 注意:此时M层请求的数据并不是直接丢给界面的tableview,而是将对象的模型M传递给C层
        • M层是通过代理来传递给C层的(网络请求类的代理或者block回调)
    • 2.C层获取到M层返回的网络数据之后,直接在C层给V层(tableview)发送刷新的指令reloadData

    • 3.当V层(tableview)想要告知C层我已经准备开始刷新了,你给我数据吧,是通过代理和数据源方法来告知的

  • MVC模式的核心就是定义了视图(view)、控制器(controller),数据(model)之间各行其道不能越界的职责

    • 可以联想到交通规则中的实线不能便道,虚线可以变道的规则
  • MVC模式的优点(由于MVC很好的分离了视图层和业务层,所以它具有以下优点)

    • 耦合度低
    • 开发速度快
    • 可维护性高
  • MVC模式的缺点

    • 由于一味地强调每一个层级之间的严格关系,当MVC三者之间,当C层需要处理的逻辑很多或者V层界面展示非常复杂的时候,就会导致某一个View文件或者Controller文件代码非常的多,甚至有四五千行代码的时候,我们维护起来就非常的麻烦。

1.2-MVVM模式

  • 此处有笔误,应该是MVVM模式下是将C层拆分成M层和V层,也就是常说的ViewModel

  • MVVM模式产生的由来就是当MVC模式下的C层代码量很多的时候将其拆分成M层和C层

    • 比如说父子控制器可以理解成是MVVM模式
    • ViewModel也是一种MVVM模式的体现,ViewModel本身是一个对象,它的内部维护了视图和视图对应的逻辑
  • MVVM模式的本质就是对MVC模式进行一个拆分,解决了MVC模式下代码臃肿的问题

  • MVVC模式的优点

    • 可复用性比MVC模式高(拆分的V和M可以被其他的mvc或者mvvm复用)
    • 耦合度低
  • MVVM模式缺点

    • 项目文件增多

1.3-MVP模式

  • MVP模式的定义

    • 作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller。
      • *也就是说,如果MVC模式中V不能直接访问M,就和MVP无异
  • 关于MVP模式误区的解读

    • MVP模式主要是解决MVC模式下V可以直接访问M导致耦合度很高的问题,但是根据网易公开课斯坦福大学教授的说法,MVC模式中V和M本来就是不能够进行交互的
      • 所以MVP模式的诞生个人认为是一个笑话,是对MVC模式理解的不够深刻所导致的
  • 以下是网易公开课斯坦福大学教授Paul Hegarty(世界知名级教授)讲解MVC模式的示意图

这里写图片描述

  • 视频链接http://open.163.com/special/opencourse/ios8.html

1.4-框架模式的总结

  • 所有的MVC或者MVVM模式的目的都是为了代码的解耦和易读性,MVC之间的沟通本质上还是OC的对象间消息机制的使用,以下是oc中的三种消息机制

    • 代理
    • 通知
    • kvo
  • 什么时候使用MVC,什么时候使用MVVM,这主要是由具体的业务需求所决定的

    • 业务需求很简单,控制器代码量不复杂(低于两千行代码),优先考虑MVC
    • 业务需求比较复杂,控制器代码量很多(高于两千行)或者V和M的复用性极高,可以考虑MVVM

这篇关于MVC和MVVM以及MVP的介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130405

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大量内存。操作系统对其进行进程或线程间的切换也消耗了大量的CPU资源,导致HTTP请求的平均响应速度降低。这些都决定了Apache不可能成为高性能WEB服务器  nginx: