模型-视图-控制器(MVC)

MVC 是 PHP 开发人员遇到的最常见的架构模式类型。从根本上来说,MVC 是一种用于实现用户界面的架构模式。

它主要围绕以下方法进行工作:

  • 模型(Model):这向应用程序提供数据,无论是来自 MySQL 数据库还是任何其他数据存储。

  • 控制器(Controller):控制器本质上是业务逻辑所在的地方。控制器处理视图提供的任何查询,并使用模型来协助它完成此行为。

  • 视图(View):提供给最终用户的实际内容。这通常是 HTML 模板。

一种交互的业务逻辑与另一种交互并没有严格的分离。应用程序的不同类之间没有正式的分隔。

必须考虑的是,MVC 模式主要是一种用户界面模式,因此不能很好地扩展到整个应用程序。也就是说,用户界面的渲染越来越多地通过 JavaScript 应用程序来完成,这种单页 JavaScript HTML 应用程序只需调用 RESTful API。

如果您使用的是 JavaScript,您可以使用 Backbone.js(模型-视图-展示)、React.js 或 Angular 等框架与您的后端 API 通信,当然,这需要一个支持 JavaScript 的 Web 浏览器,而我们中的一些人认为用户使用 JavaScript 是理所当然的。

如果您所处的环境无法使用 JavaScript 应用程序,而必须提供渲染过的 HTML,那么您的 MVC 应用程序通常只需使用 REST API 即可。REST API 执行所有业务逻辑,但标记的渲染是在 MVC 应用程序中完成的。虽然这会增加复杂性,但它提供了更大的责任分离,因此不会出现 HTML 与核心业务逻辑合并的情况。也就是说,即使在这种 REST API 中,您也需要某种形式的责任分离,您需要将标记的呈现与实际业务逻辑分离开来。

选择适合应用程序的架构模式的一个关键因素是其复杂性是否适合应用程序的规模。因此,在选择 MVC 框架时还应考虑应用程序本身的复杂性及其日后的预期复杂性。

鉴于基础设施即代码的发展,以完全协调的方式部署多个网络服务的基础设施成为可能。事实上,使用容器化技术(如 Docker),可以部署多种架构(如带有单独 API 服务的 MVC 应用程序),而且开销很小(无需为每个服务启动新的服务器)。

在开发优秀架构时,关注点分离是一个重要特征,其中包括用户界面与业务逻辑的分离。

在考虑 MVC 模式时,重要的是要记住以下交互方式:

  • 模型存储数据,根据模型发出的查询检索数据并由视图显示

  • 视图根据模型的更改生成输出

  • Controller 发送命令更新 Model 的状态;它还可以更新与其关联的视图,以改变给定模型的呈现方式,

或者,通常使用下图表示:

image 2023 10 31 11 58 55 772

不要为了使用 MVC 框架而使用 MVC 框架,要了解它们存在的原因,以及它们在哪些方面可以很好地适应用例。请记住,当你使用一个功能繁多的臃肿框架时,你就要承担起维护整个框架的责任。

在开发具有大量业务逻辑的软件时,根据需要调用组件(即通过 Composer)是一种实用得多的方法。