本材料是“企业发展概论”系列的一部分。上一篇文章:
在本材料中,我们将向您介绍 MVC 这样的东西。让我们谈谈什么是 MVC,了解它的创建历史,了解 MVC 固有的主要思想和概念,逐步考虑如何将应用程序分解为模型、视图、控制器模块,并在其中编写一个小型 Web 应用程序Spring-Boot,并以Spring-MVC为例,让我们看看数据是如何从Java代码传输到html页面的。要理解这些材料,您需要熟悉设计模式,尤其是观察者和外观。熟悉HTTP请求和响应,了解html的基础知识,知道Java中的注释是什么。坐下来,泡茶,准备甜点、沙拉、主菜和第一道菜。我们开始。
MVC 的历史
MVC 的想法是由 Trygve Reenskaug 于 70 年代末在 Xerox PARC 工作时提出的。在那些日子里,如果没有学位和对大量文档的不断研究,就不可能使用计算机。Reenskaug 与一群非常强大的开发人员一起解决的问题是简化普通用户与计算机的交互。有必要创建一种工具,一方面极其简单易懂,另一方面能够管理计算机和复杂的应用程序。Reenskaug 曾在 Alan Kay 领导下的团队中工作,该团队开发了“适合所有年龄段儿童”的便携式计算机 - Dynabook 以及 SmallTalk 语言。就在那时,友好界面的概念被确立。Reenskaug 与他的团队的合作极大地影响了 IT 领域的发展。让我们介绍一个有趣的事实,它与 MVC 没有直接关系,但说明了这些发展的重要性。2007 年,苹果 iPhone 发布后,艾伦·凯 (Alan Kay) 说道:“麦金塔电脑问世时,《新闻周刊》问我对此有何看法。我说:这是第一台值得批评的个人电脑。演讲结束后,史蒂夫·乔布斯上前问道:iPhone值得批评吗?我说,把它做成五乘八英寸,你就能征服世界。” 三年后,2010 年 1 月 27 日,苹果推出了 9.7 英寸 iPad。也就是说,史蒂夫·乔布斯几乎完全遵循了艾伦·凯的建议。Rennskaug 从事的项目持续了 10 年。又过了 10 年,其创建者第一个关于 MVC 的出版物出版了。Martin Fowler 是许多有关软件架构的书籍和文章的作者,他提到他是从 SmallTalk 的工作版本中学习 MVC 的。由于很长一段时间没有从主要来源获得有关 MVC 的信息,以及由于许多其他原因,出现了对此概念的大量不同解释。因此,很多人认为MVC是一种设计方案或模式。不太常见的是,MVC 称为复合模式或协同工作以实现复杂应用程序的多种模式的组合。但事实上,正如前面所说,MVC 主要是一组架构思想/原则/方法,可以使用各种模式以各种方式实现......接下来,我们将尝试看看 MVC 概念中嵌入的主要思想。什么是MVC:基本思想和原则
- VC是一套用于构建具有用户界面的复杂信息系统的架构思想和原则;
- MVC 是模型-视图-控制器的缩写。
步骤 1:将应用程序的业务逻辑与用户界面分离
MVC 的关键思想是,任何具有用户界面的应用程序都可以粗略地分为 2 个模块:负责实现应用程序业务逻辑的模块和用户界面。第一个模块将实现应用程序的主要功能。该模块将是系统的核心,在其中实现应用领域模型。在MVC概念中,这个模块将是我们的字母M,即 模型。第二个模块将实现整个用户界面,包括向用户显示数据以及用户与应用程序交互的逻辑。这种分离的主要目的是保证系统的核心(MVC术语中的模型)可以独立开发和测试。这样划分后的应用架构会是这样的:步骤 2. 使用观察者模式,实现模型更大的独立性以及用户界面的同步
在这里我们追求两个目标:- 实现模型更大的独立性。
- 同步用户界面。
步骤3.将界面分为View和Controller
我们继续将应用程序划分为模块,但处于层次结构的较低级别。在此步骤中,用户界面(在步骤 1 中被分成单独的模块)被分为视图和控制器。在视图和控制器之间划出严格的界限是很困难的。如果说视图是用户看到的东西,而控制器是用户与系统交互的机制,那就有些矛盾了。控件(例如网页上的按钮或电话屏幕上的虚拟键盘)本质上是控制器的一部分。但它们与视图的任何部分一样对用户可见。这里我们更多地讨论一下功能划分。用户界面的主要任务是确保用户与系统的交互。这意味着该接口只有2个功能:- 向用户展示并方便地展示系统的相关信息;
- 将用户数据和命令输入系统(将其传输到系统);
- 按照MVC的原则,系统需要进行模块划分。
- 最重要、最独立的模块应该是模型。
- 模型是系统的核心。您需要能够独立于界面来开发和测试它。
- 为此,在系统隔离的第一步,您需要将其划分为模型和接口。
- 接下来,使用观察者模式,我们增强了模型的独立性并获得了用户界面的同步。
- 第三步,将界面分为控制器和视图。
- 将用户的信息输入系统所需的全部工作就是输入控制器。
- 所有从系统向用户输出信息的部分都在视图中。
GO TO FULL VERSION