解释模型视图控制器


13

我在开发动态网站方面的经验主要限于Java Servlet。我已经使用Tomcat开发了各种Java servlet,并且我毫不犹豫地说我对这项技术以及前端的客户端HTML / CSS / Javascript相当精通。

当我想到“动态网站”时,我认为:用户请求带有查询字符串的URL,服务器接收查询,然后继续动态输出HTML以响应查询。这通常涉及与数据库的通信,以便获取请求的数据以进行显示。这基本上doGet是Java方法背后的思想HttpServlet

但是,这些天来,我越来越多地听到有关诸如Django和Ruby on Rails之类的较新框架的信息,它们都利用了“模型视图控制器”架构。我已经阅读了许多 解释MVC的文章,但是我很难真正理解其好处。我知道一般的想法是将业务逻辑与UI逻辑分开,但是我看不出这与普通的Web编程有什么真正的不同。从本质上讲,Web编程迫使您将业务逻辑(后端服务器端编程)与UI编程(客户端HTML或Javascript)分开,因为两者存在于完全不同的编程领域。

问题: MVC在Java servlet之类的东西上提供了什么?更重要的是, MVC到底是什么?与使用Java servlet(甚至是Java servlet)甚至更传统的方法来开发动态网站时,MVC有何不同?像CGI这样的旧版本?如果可能,在解释MVC时,请提供一个示例,说明如何将MVC应用于Web开发过程以及它如何带来好处。

Answers:


7

首先,我认为最好是谈论什么是MVC体系结构,然后再深入探讨当前编程的方式。

MVC体系结构是在软件系统内部组织工作流的一种方式,可以将其视为实现系统行为的分层方式。这些层是:

  1. 模型:代表您的数据模型,它是系统的核心,与之相关的所有信息都应本地化。因此,例如:如果要设计游戏,则需要玩家,规则,障碍物以及与此元素互动有关的一些逻辑,例如:当应用某些规则集时,玩家应该能够对障碍物进行排序。

    模型是您首先应该考虑的,因为它将成为您应用程序的中心

  2. 控制器:这是魔术发生的地方,分层体系结构与它打算使用的面向对象范例相遇的地方。在这里,您可以实现在某些应用程序用户通过用户界面请求有关应用程序的某些信息时系统如何做出反应。

    控制器应该能够处理模型对象,对它们进行操作以实现用户要求的内容,然后将结果委托给相应的视图层以将其呈现给我们的用户。

  3. 视图:这是用户交互的起点和终点。在这里定义用户如何与应用程序交互。如今,相当普遍的用户尝试从各种媒体访问Web应用程序,例如:手机,桌子,个人电脑,笔记本电脑等。

    通常,每种技术都需要使用不同的语言来创建视图,因此,假设您的数据模型,模型交互的方式以及如何呈现交互的方式都是硬编码的,绝对没有办法以非CopyPaste的方式重用代码。结果是,代码变臭了,并且浪费了很多时间来适应HOLE系统。

    View放在一个单独的层中的美德使我们能够独立于当前正在使用的Model进行工作。我们只需要知道如何渲染控制器发送给我们的对象列表即可。他是如何产生的是完全琐碎的

所以,最后我们得到了一个独立模型,可以根据我们的当前需求进行调整(今天,我需要无规则地处理Monouser游戏,明天我希望和朋友一起玩,现在是它的Multiuser,依此类推)这不取决于我们如何将其呈现给用户。然后,一个Controller捕获来自视图的用户请求,处理Model Objects,然后将信息返回给View进行渲染。

回到您提出的第一个问题:就像您可以看到的(希望的那样),MVC是一种做事的方式,而不是创建软件的TECHNOLOGIE。您可以使用Java Servlet,并在其下实现MVC架构。

这是一个问答示例站点,使用MVC体系结构进行了澄清 在此处输入图片说明


6

回答你的问题

What does MVC offer over something like a Java servlet

MVC是一种模式,而不是一种技术。因此,当您使用Servlet进行编程时,也可以应用该模式。

让我尝试用Servlets本身解释MVC模式。因此,当您谈论应用MVC时,您想要做的是将模型(业务逻辑),视图(表示逻辑)和控制器(将控制权委派给适当的业务逻辑的控制器Servlet)分开。

在这种情况下,MVC并不仅仅是将业务与表示层和控制器层分开,而是业务层甚至不知道存在控制器或表示。

Java的主要框架(如Struts)都遵循这种模式。我认为您弄错了这个概念。您可以在互联网上阅读有关它的更多信息。


2

MVC确实很容易理解,它只是一种设计模式,但是,我已经看到最困难/最容易监督的是Model部分。

  • 模型:您的数据(不是专门用于数据库!,模型甚至可以是ini或xml文件,也可以是来自Web服务的数据)。模型类用于定义,组装和处理数据。阅读出色的文章“ MVC中的M:为什么模型被误解和未被理解 ”。只能由控制器访问模型。
  • 视图:您的GUI(演示)代码。应该只访问控制器
  • 控制器:您的逻辑。处理模型和视图之间的通信。

1

模型-视图-控制器的概念是什么新鲜事。它始于1979年左右的Smalltalk。

从本质上讲,MVC是一种组织代码职责的方法,从而使其模块化,可预测且健壮。

分离为您提供以下自由:

  • 能够在不影响应用程序逻辑或显示数据的情况下演化模型
  • 能够更改业务逻辑而不影响模型(例如,添加新步骤等)的能力
  • 能够以多种不同方式表示模型

您可以谨慎地设计模型和控制器,以便可以将Web应用程序作为前端完全替换桌面应用程序。

最近,针对MVC的Ruby on Rails方法引入了一些较新的概念,这些概念已在几乎所有MVC样式的Web应用程序框架中复制。这包括“约定之上的配置”,将控制器操作映射到类方法以及将URL请求路由到基础代码的概念。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.