什么是MVC设计模式

2023-11-18

直接上图,其中model 和view大家经常写,就不说了

有人可能并不清楚controller 到底是啥,其实就是经常写的 data source ,delegate,outlet什么的

先撇开那些乱七八糟的箭头单看他们之间的分界线,view与controller、model与controller之间的线是虚的,而model与view之间的是双黄线,考过驾照的知道越过这个线意味着什么吧。

 

控制器与视图之间的大部分连线都可以在Xcode中通过按住ctrl来连接。例如outlet,例如delegate。有了这些连线,他们之间的沟通算是畅通无阻了。

1)用户在view上的操作可以直接告诉控制器让控制器去响应

2)view需要的代理也可以指派给控制器让控制器去完成

3)view需要的数据源也需要控制器来提供

总之,控制器很忙,因为它非常被动。

 

控制器还需要一个角色的参与:model

顾名思义,模型。我觉得使用asp.net里mvc的domain来描述比较好理解,领域。例如你要开发一个图书管理系统,模型里描绘的就是图书的书名、售价、作者,谁借走了,几号借走的,一切关于这个应用领域的数据。

我们可以给模型一个简单的定义:它描述了一个应用所有需要抽象出来的数据结构和这些数据之间的关系,还有他们获取数据需要通过的途径(本地的、远程的)等。

有了模型,控制器想啥时候去拿数,想怎么拿都行。

 

仔细观察上面的图,有控制器到model的箭头,没有model到控制器的箭头。因为模型不需要知道控制器的存在,这样可以减少耦合,提高代码复用可能性。把你定义好的model挪到别的项目中,还可以使用。

但是问题来了,当model数据已经更新了,被修改了,怎么通知相关的控制器?注意model上方有个天线,高端!之所以使用无线的,是因为model不知道更改要发给谁,但是model可以广播,model的观点:谁关心我的更改让谁收听去,我对谁收听了我不感兴趣。

广播的方式有两种:Notification 和 KVO(都是设计模式,本系列接下来会详述)

 

好了,他们几个之间的关系基本有个概念了。mvc模式就是这样,把原本杂乱无章的类,分为三堆,严格监管,按规则行事。

还是那句话:

说到底一切都是为了使类之间的耦合性更松散。好的代码应该对扩展开放,对修改关闭

以下是学院派喜欢看的概念

一、MVC模式概述

模型-视图-控制器(MVC模式)是一种非常经典的软件架构模式,在UI框架和UI设计思路中扮演着非常重要的角色。从设计模式的角度来看,MVC模式是一种复合模式,它将多个设计模式在一种解决方案中结合起来,用来解决许多设计问题。MVC模式把用户界面交互分拆到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型)、View(视图)、Control(控制器)。它们各自处理自己的任务:

(1)模型:模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。

(2)视图:用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息可以有多个不同的显示形式或视图。

(3)控制器:位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器。

MVC模式将它们分离以提高系统的灵活性和复用性,不使用MVC模式,用户界面设计往往将这些对象混在一起。MVC模式实现了模型和视图的分离,这带来了几个好处。

(1)一个模型提供不同的多个视图表现形式,也能够为一个模型创建新的视图而无须重写模型。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地刷新自己。

(2)模型可复用。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。

(3)提高开发效率。在开发界面显示部分时,你仅仅需要考虑的是如何布局一个好的用户界面;开发模型时,你仅仅要考虑的是业务逻辑和数据维护,这样能使开发者专注于某一方面的开发,提高开发效率。

MVC模式浅谈


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是MVC设计模式 的相关文章

随机推荐

  • Git, Gitlab使用文档

    一 前期准备 配置网络 连接局域网 下载 windows git 注册gitlab账号 注册后需要管理员确认通过 二 配置ssh 本处来源 docker下gitlab安装配置使用 1 打开本地git bash 使用如下命令生成ssh公钥和私
  • Spring源码学习之BeanDefinition源码解析

    本文作者 磊叔 GLMapper本文链接 https juejin cn post 6844903553820000269 Bean的定义主要由BeanDefinition来描述的 作为Spring中用于包装Bean的数据结构 今天就来看看
  • VMware虚拟化- 虚拟化与VMware的基础介绍

    1 什么是虚拟化 1 1 虚拟化概念 通俗的理解 如果你问 什么是虚拟化 我想大部分人的回答都会是 就是在一个操作系统中运行另一个操作系统 虽然这个答案也没错 但这并不是真正 虚拟化 的意义 只能说是虚拟化在硬件和操作系统之间的一个实践 事
  • 2023华为OD机试真题【计算敌人数量】

    题目描述 有一个大小是N M的战场地图 被墙壁 分隔成大小不同的区域 上下左右四个方向相邻的空地 属于同一个区域 只有空地上可能存在敌人 E 请求出地图上总共有多少区域里的敌人数小于K 输入描述 第一行输入为N M K N表示地图的行数 M
  • chromecast 协议_Chromecast和Android TV有什么区别?

    chromecast 协议 Google isn t particularly known for its clear branding This is certainly the case when it comes to Chromec
  • windows IPad 文件导入

    windows IPad 文件导入 首先下载iTunes Apple官网 itunes 打开软件 连接IPad 点击该按钮 点击文件共享和上传的软件 之后直接文件拖拽到右边的文档框里面
  • openwrt设置定时重启(天/周/月)

    1 进入openwrt管理页面 找到 系统 计划任务 编辑命令行 点击 保存 2 系统 启动项 中找到cron 确认状态为 开启 点击 重启 使计划生效 或重启系统 说明 一定要设置延时 防止无限重启 每天凌晨1点45分 延时70秒后自动重
  • Navicat for oracle创建数据库

    前言 其实在Oracle中的概念并不是创建数据库 而是创建一个表空间 然后再创建一个用户 设置该用户的默认表空间为我们新创建的表空间 这些操作之后 便和你之前用过的mysql数据库创建完数据库一模一样了 如果你用过mysql的话 当然如果O
  • 基于E-R模型的关系型数据库设计方法

    摘要 在管理信息系统开发中 数据库设计的目标是建立DBMS能识别的关系数据模型 而关系数据模型建立的基础是首先建立E R模型 通过E R模型才能转换为关系数据模型 如何建立E R模型以及如何将E R模型转换为关系数据模型 是管理信息系统开发
  • logback日志不打印到文件问题深入剖析

    详细探究logback不打印日志到文件的问题分析与案例演示 并提供官网bug的提交链接 环境与配置 问题 解决 原因 测试源码 测试结果 深入 线程出异常是否还会打印日志 环境与配置 使用maven构建的 引入logback依赖如下 注 其
  • vue2解决并实现页面刷新内容不变化

    前言 我们都知道 在vue中数据是响应式的 但是对于刷新的之后数据也会丢失 这就得借助于数据库存储 那么在vue中怎么去实现数据库的连接以及数据传输呢 下面我们来一起看一看 在之前我也在这个问题上困扰了很长时间 为了让大家都能看得懂 给大家
  • WPF之UI虚拟化

    在WPF应用程序开发过程中 大数据量的数据展现通常都要考虑性能问题 有下面一种常见的情况 原始数据源数据量很大 但是某一时刻数据容器中的可见元素个数是有限的 剩余大多数元素都处于不可见状态 如果一次性将所有的数据元素都渲染出来则会非常的消耗
  • neutron的DHCP错误之”sudo: unable to resolve host node-1\novs-vsctl:“

    问题背景 使用ESX创建虚拟机 并在虚拟机上创建一个三节点的openstack环境 参考官方的ICEHOUSE版本 注 ubuntu 14 04只支持到icehouse版 为加快虚拟机的创建时间 本文首先创建了一个控制节点c 1 并进行更新
  • pci无线配置服务器,PCI配置空间(中文).doc

    PCI Configuration 名词说明 PCI为Peripheral Component Interconnect 的缩写 它是由 Intel 所发表的另一种局部总线 另一种为 VESA Local Bus 以配合 Pentium 系
  • ACE_Proactor实现

    ACE Proactor实现了Facade模式 其方法可以分为四类 生命周期管理方法 事件循环管理方法 定时器管理方法 IO操作facilitator方法 须知ACE Proactor是使用Bridge模式的 ACE aynch Read
  • 内网安全-隧道搭建&穿透上线&FRP&NPS&Ngrok

    目录 环境介绍 内网穿透 Ngrok 入门 上线 tcp协议 内网穿透 Frp 简易型 上线 内网穿透 Nps 自定义 上线 环境介绍 实验目的 让msf上线外网 通常情况下 内网可以访问外网 但是外网无法访问到内网 所以外网的木马通常情况
  • 将二叉树转为有序的双向链表

    一 题目要求 输入一棵二叉排序树 现在要将该二叉排序树转换成一个有序的双向链表 而且在转换的过程中 不能创建任何新的结点 只能调整树中的结点指针的指向来实现 include
  • AHB to APB bridge

    目录 SPEC 验证框架图 测试点分解以及设计测试用例 测试点分解 设计测试用例 具体的Sequence及testcase Sequence testcase SPEC DUT如下 具体功能描述可参考ARM官方文档 AHB to APB s
  • 驾驭计算机视觉的翅膀:论文找代码的几种必杀技!

    摘要 对于CVer来说 代码和找代码 能力都是一种很重要的能力 毕竟idea再好只有通过代码实现出来才能发文章和刷榜 当我们阅读一篇高质量或者英文论文时 如何去找到该文章实现的代码 进而结合文章内容和代码实现去更好的理解作者所做的工作 只有
  • 什么是MVC设计模式

    直接上图 其中model 和view大家经常写 就不说了 有人可能并不清楚controller 到底是啥 其实就是经常写的 data source delegate outlet什么的 先撇开那些乱七八糟的箭头单看他们之间的分界线 view