审查框架

在第 6 章 "适应 MVC" 中,我们几乎没有介绍使用 MVC 设计模式的框架概念。事实上,我们并没有解释什么是框架;我们只是开发了一个非常简单的框架。如果你正在寻找一个定义,那就是:框架就是你选择用来构建程序的结构。让我们来详细讨论一下。

框架的目的

在编写应用程序时,如果您使用 MVC 设计模式(我们非常鼓励您这样做),您需要添加模型、视图和控制器。这三个元素,再加上完成视图的 JavaScript 和 CSS 文件,将使您的应用程序与众不同。您不可能跳过编写它们。

另一方面,有一些类,尽管您需要它们来保证应用程序的正常运行,但它们却是所有其他应用程序的共用类,或者至少是非常相似的类。这些类的例子就是我们在 src/Core 目录中的那些类,如路由器、配置读取器等。

框架的目的很明确,也很必要:它们为应用程序添加了一些结构,并将其中的不同元素连接起来。在我们的示例中,它帮助我们将 HTTP 请求路由到正确的控制器、连接到数据库并生成动态 HTML 作为响应。然而,必须努力实现的理念是框架的可重用性。如果每次启动应用程序时都要编写框架,这样行吗?

因此,为了让框架发挥作用,它必须易于在不同环境中重复使用。这意味着框架必须可以从源代码中下载,而且必须易于安装。下载并安装一个依赖项?看来 Composer 又要派上用场了!尽管几年前的情况与现在大不相同,但如今所有主要框架都可以使用 Composer 进行安装。稍后我们将向您展示如何安装。

框架的主要部分

如果我们将框架开源,让其他开发人员也能使用,那么我们就需要以直观的方式构建代码。我们需要尽可能地减少学习曲线;没有人愿意花费数周时间来学习如何使用框架。

由于 MVC 是网络应用程序中事实上的网络设计模式,因此大多数框架都会将模型、视图和控制器这三层分隔在三个不同的目录中。根据框架的不同,它们会被放在 src/ 目录下,尽管在该目录之外找到视图也很常见,就像我们自己的视图一样。不过,大多数框架都会给你足够的灵活性来决定将每一层放在哪里。

以前,完成框架的其他类都被归入一个单独的目录,例如 src/Core。将这些元素与你的元素分开是很重要的,这样你就不会混淆代码,无意中修改了核心类,从而弄乱了整个框架。更妙的是,上一代 PHP 框架已将核心组件作为独立模块纳入其中,这将需要通过 Composer 来实现。这样,框架的 composer.json 文件将需要所有不同的组件,如路由器、配置、数据库连接、日志记录器、模板引擎等,Composer 会将它们下载到 vendor/ 目录中,并通过自动生成的自动加载器提供这些组件。

在不同的代码库中分离不同的组件有很多好处。首先,它允许不同的开发团队以隔离的方式处理不同的组件。由于代码被分开,不会相互影响,因此维护起来也更容易。最后,它还允许最终用户为自己的应用程序选择所需的组件,以便对框架进行定制,舍弃那些不常用的重型组件。

框架可以按独立模块组织,也可以将所有组件集中在一起;但始终存在相同的通用组件,即:

  • 路由器:该类在收到 HTTP 请求时,会找到正确的控制器,将其实例化并执行,然后返回 HTTP 响应。

  • 请求:它包含一些方法,允许你访问参数、cookie、头等。这主要由路由器使用并发送到控制器。

  • 配置处理程序:它允许你获取正确的配置文件,读取文件并使用文件内容配置其他组件。- 模板引擎:它将 HTML 与控制器中的内容合并,以便将模板与响应一起呈现。

  • 日志记录器:它将错误或其他我们认为重要的信息添加到日志文件中。

  • 依赖注入器:它负责管理类所需的所有依赖关系。也许框架没有依赖注入器,但它有类似的东西,即服务定位器,它试图以类似的方式帮助你。

  • 编写和运行单元测试的方式:大多数情况下,框架都包含 PHPUnit,但社区中还有更多选择。