MVC

MVC(模型-视图-控制器)是软件设计中的一种模式,通常用于实现用户界面、数据和控制逻辑。它强调软件业务逻辑和显示之间的分离。这种“关注点分离”提供了更好的劳动分工和改进的维护性。一些其他设计模式基于MVC,例如MVVM(模型-视图-视图模型)、MVP(模型-视图-呈现器)和MVW(模型-视图-任何东西)。

MVC软件设计模式的三个部分可以描述如下

  1. 模型:管理数据和业务逻辑。
  2. 视图:处理布局和显示。
  3. 控制器:将命令路由到模型和视图部分。

模型视图控制器示例

想象一个简单的购物清单应用程序。我们想要的只是我们需要在本周购买的每个商品的名称、数量和价格的列表。下面我们将描述如何使用MVC实现其中一些功能。

Diagram to show the different parts of the mvc architecture.

模型

模型定义了应用程序应包含哪些数据。如果此数据的状态发生更改,则模型通常会通知视图(以便显示可以根据需要更改)并且有时会通知控制器(如果需要不同的逻辑来控制更新的视图)。

回到我们的购物清单应用程序,模型将指定列表项应包含哪些数据——商品、价格等——以及哪些列表项已存在。

视图

视图定义了应用程序的数据应如何显示。

在我们的购物清单应用程序中,视图将定义如何向用户呈现列表,并从模型接收要显示的数据。

控制器

控制器包含响应应用程序用户的输入更新模型和/或视图的逻辑。

例如,我们的购物清单可以有输入表单和按钮,允许我们添加或删除商品。这些操作需要更新模型,因此输入发送到控制器,然后控制器根据需要操作模型,然后模型将更新的数据发送到视图。

但是,您可能也只想更新视图以以不同的格式显示数据,例如,将商品顺序更改为字母顺序或从最低到最高价格。在这种情况下,控制器可以直接处理此问题,而无需更新模型。

网页上的 MVC

作为 Web 开发人员,即使您以前从未有意识地使用过此模式,此模式也可能非常熟悉。您的数据模型可能包含在某种类型的数据库中(无论是传统的服务器端数据库(如 MySQL),还是客户端解决方案(如IndexedDB [en-US])。您的应用程序控制代码可能使用 HTML/JavaScript 编写,并且您的用户界面可能使用 HTML/CSS/您喜欢的任何其他内容编写。这听起来非常像 MVC,但 MVC 使这些组件遵循更严格的模式。

在 Web 的早期,MVC 架构主要在服务器端实现,客户端通过表单或链接请求更新,并接收更新的视图以在浏览器中显示。但是,如今,随着客户端数据存储的出现以及Fetch API 能够根据需要进行部分页面更新,更多的逻辑被推送到客户端。

诸如AngularJSEmber.js 之类的 Web 框架都实现了 MVC 架构,尽管方式略有不同。

另请参阅