Java MVC 架构初学者指南

已发表: 2018-04-10

如果您与 Web 开发场景相关,那么您肯定会遇到数百次(甚至更多)首字母缩略词“MVC”。 MVC 是当今 Web 编程世界中谈论最多的设计模式之一,这是正确的。 在本文中,我们将带您了解 MVC 架构的世界。 我们将讨论 MVC 的基础知识,它的优点,最后,一个简单的代码将帮助您以更清晰的方式理解 Java 中的 MVC 实现。

目录

MVC 架构到底是什么?

在我们深入了解它的技术细节之前,让我们先搞清楚一些事情——MVC 不是一种设计模式,它是一种构建应用程序的方式。 近年来,Web 应用程序大量使用 MVC 架构,因此很自然地将其混淆为 Web 应用程序专有的设计模式。 但是,让我们告诉您,MVC 最早是在 1979 年被描述的——在 WWW 时代之前,还没有 Web 应用程序的概念。 今天用于 Web 应用程序的架构是对原始模式的改编。
事实上,这种架构最初包含在两个主要的 Web 开发框架中——Struts 和 Ruby on Rails。 这两种环境为后来出现的大多数 Web 框架铺平了道路——因此这种架构的流行度不断上升。

学习构建 Swiggy、Quora、IMDB 等应用程序

MVC 架构模式遵循一个基本思想——我们必须在以下基础上分离任何应用程序中的职责:

  • 模型:处理数据和业务逻辑。
  • 查看:在需要时向用户展示数据。
  • 控制器:处理用户请求并获取必要的资源。

每个组件都有一组划定的任务,以确保整个应用程序的平稳运行以及完整的模块化。 让我们更详细地了解这些组件中的每一个。

控制器

控制器就像应用程序的管家——它执行模型和视图之间的协调来满足用户请求。 用户请求以 HTTP get 或 post 请求的形式接收 - 例如,当用户单击任何 GUI 元素以执行任何操作时。
控制器的主要功能是调用模型并与模型协调以获取执行所需的任何必要资源。 通常,在接收到用户请求时,控制器会为手头的任务调用适当的模型。

模型

模型很简单,就是我们应用程序的数据。 数据易于存储、检索和编辑的方式“建模”该模型是我们如何将规则应用于我们的数据,最终代表我们的应用程序管理的概念。
对于任何软件应用程序,一切都被建模为可以轻松处理的数据。 什么是应用程序的用户、书籍或消息? 没什么,只有必须根据特定规则处理的数据。 例如,日期不得早于当前日期,电子邮件格式必须正确,姓名不得超过“x”个字符等。

每当用户从控制器发出任何请求时,它都会联系适当的模型,该模型返回用户请求的数据表示。 无论我们希望如何向用户显示,该模型对于特定作品都是相同的。 这就是为什么我们可以选择任何可用的视图来渲染模型数据。
此外,模型还包含在模型数据发生任何变化时更新相关控制器的逻辑。

看法

顾名思义,视图负责渲染从模型接收到的数据。 可能有预先设计的模板,您可以在其中拟合数据,根据要求,每个模型甚至可能有几个不同的视图。

任何 Web 应用程序的结构都牢记这三个核心组件。 可能有一个主控制器负责接收所有请求并调用特定控制器执行特定操作。 让我们通过一个示例更好地了解 MVC 架构下 Web 应用程序的工作原理。

让我们看一个例子

让我们以在线文具店为例。 用户可以查看商品、购买、将商品添加到购物车、将商品添加到当前订单,甚至添加/删除商品(如果他是管理员)。
现在,让我们看看当用户单击标题“笔”以查看笔列表时会发生什么。
我们的应用程序将有一个特定的控制器来处理与笔相关的所有查询。 假设它被称为“pens_controller.php”。 我们还将有一个模型来存储我们所拥有的笔的数据——我们称之为“pens_model.php”。 最后,我们将有几个视图来展示数据——一个钢笔列表、一个显示钢笔的表格、一个编辑列表的页面等。
下图显示了从用户单击“笔”到结果呈现在他面前的完整控制流程:

首先,“pens_controller.php”将用户请求 (1) 处理为 GET 或 POST 请求。 我们还可以有一个“index.php”,它是中央控制器,它会在需要时调用“pens_controller”。
然后控制器检查请求和参数并调用所需的模型——在本例中为“pens_model.php”。 控制器要求模型返回可用笔列表 (2)。
现在,模型在数据库中搜索必要的信息 (3),必要时应用逻辑,并将数据返回给控制器 (4)。
然后控制器选择适当的视图 (5) 并呈现数据 (6 和 7)。 如果请求来自手持设备,则将使用适合它的视图,或者如果用户选择了特定主题,则将选择其视图 - 依此类推。
如何成为全栈开发人员

MVC 架构的优势

如今,应用程序开发人员面临的一个常见问题是对不同类型设备的支持。 MVC 架构解决了这个问题,因为开发人员可以为不同的设备创建不同的接口,并且根据从哪个设备发出请求,控制器将选择合适的视图。 无论使用何种设备,该模型都会发送相同的数据,从而确保所有设备之间的完全一致性。
MVC 分离很好地将视图与业务逻辑隔离开来。 它还通过保持代码和工作流程的结构化来降低设计大型应用程序的复杂性。 这使得整个代码更易于维护、测试、调试和重用。

使用 Java 实现 MVC 的简单实现

我们将有以下三个:

    1. StudentObject:模型。

    1. StudentView:查看课程以在控制台上打印详细信息。

  1. StudentController:将数据存储在studentObject中并相应更新StudentView的控制器

第 1 步:创建模型

公共学生{
   私有字符串rollNo ;
   私有字符串名称
   
   公共字符串getRollNo () {
      返回卷号
   }
   
   公共无效setRollNo 字符串rollNo  {
      这个 卷号=卷号
   }
   
   公共字符串getName () {
      返回名称
   }
   
   公共无效setName 字符串名称 {
      这个 名称=名称
   }
}

代码是不言自明的。 它由获取/设置卷号和学生姓名的功能组成。 我们称之为“student.java”。
第 2 步:创建视图

公共StudentView {
   public void printStudentDetails ( String studentName , String studentRollNo ){
      系统 出来 println ( "学生:" );
      系统 出来 println ( "姓名:" +学生姓名);
      系统 出来 println ( "卷号:" + studentRollNo );
   }
}

这只是将值打印到控制台。 我们称之为“studentView.java”。
第三步:创建控制器

公共StudentController {
   私人学生模型
   私人学生视图
   public StudentController 学生模型 StudentView视图){
      这个 模型=模型
      这个 视图=视图
   }
   公共无效setStudentName 字符串名称){
模型 设置名称名称);
   }
   公共字符串getStudentName (){
      返回模型 获取名称();
   }
   公共无效setStudentRollNo 字符串rollNo ){
模型 setRollNo ( rollNo );
   }
   公共字符串getStudentRollNo (){
      返回模型 getRollNo ();
   }
   公共无效更新视图(){
查看 printStudentDetails ( model.getName ( ), model.getRollNo ( ) ) ;
   }
}

将此称为“StudentController.java”。 粗略看一眼就会告诉你,这个控制器只是负责调用模型来获取/设置数据,然后更新视图。
现在,让我们看看所有这些是如何联系在一起的。
第 4 步:创建主 Java 文件

公共MVCPatternDemo {
   公共静态无效主要字符串[]参数 {
      //根据他的卷号从数据库中获取学生记录
      学生模型= retriveStudentFromDatabase ();
      //创建一个视图:在控制台上写入学生详细信息
      StudentView视图= new StudentView ();
      StudentController控制器=StudentController (模型,视图);
控制器 更新视图();
      //更新模型数据
控制器 setStudentName  “约翰” );
控制器 更新视图();
   }
   私人静态学生retriveStudentFromDatabase (){
      学生学生=学生();
学生 设置名称 “罗伯特” );
学生 setRollNo ( "10" );
      返校
   }
}

这称为“MVCPatternDemo.java”。 如您所见,它从数据库或函数中获取学生数据(在本例中,我们使用函数来设置值)并将其推送到 Student 模型。 然后,它初始化我们之前创建的视图。
此外,它还初始化我们的控制器并将其绑定到模型和视图。 updateView() 方法是控制器的一部分,用于更新控制台上的学生详细信息。
第 5 步:测试结果
如果一切顺利,结果应该是:

 学生:
姓名:罗伯特
卷号:10
学生:
姓名:约翰
卷号:10

如果你得到这个作为输出,恭喜! 您已经使用 Java 成功实现了 MVC 架构,尽管是针对一个简单的应用程序。 无论多么简单,这个应用程序都足以展示 MVC 架构的强大功能。
15 个必须知道的 Spring MVC 面试问题

包起来…
在说了这么多之后,现在很难再强调 MVC 架构在任何 Web/桌面应用程序中的强大功能了。 它为您的代码提供了全新级别的模块化,使其更具可读性和可维护性。 因此,如果您想在应用程序开发人员的职业生涯中达到新的高度,那么掌握 MVC 架构及其工作应该是您的首要任务。

报名参加世界顶尖大学的软件工程课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

请发表评论,让我们知道您喜欢这篇文章!

成为全栈开发人员

UpGrad 和 IIIT-Bangalore 的软件开发 PG 文凭
立即申请软件工程硕士