什么是MVC架构,它是如何工作的?
如今,开发人员已经改变了他们设计网站的模式。他们大多使用[Django]、[Rails]、[Laravel]、[Yii 2]等框架。
程序员利用各种模式和软件架构,使他们的代码更容易理解,并更快地开发应用程序。
Model-View-Controller Architecture (MVC) 是这些设计模式中的一种。MVC框架已经成为现代Web应用开发的一个重要组成部分。
在这篇文章中,我们将了解MVC框架,它的好处,以及如何开发高效的软件应用程序。
什么是框架?
一个Framework 是一个骨架解决方案(它给出了轮廓),其中必须插入特定的元素以建立一个坚实的解决方案。它们是由一组相关的类组成的,可以通过专业化来实现一个应用程序。
软件架构的定义
软件架构是一个系统的组织方式。这种组织方式涵盖了所有的组件,它们如何互动,操作环境,以及软件设计原则。
模型-视图-控制器架构
目前,MVC ,是开发人员正在使用的排名靠前的软件架构。它由三个相互联系的组件组成。这些组件是:
- 模型
- 视图
- 控制器
让我们看一下每个组件的功能。
1.模型
模型是为应用程序保存数据的层。该层负责存储和检索数据库中的数据,它还负责验证数据。
例如,如果你想创建一个新的用户,你将不得不创建一个新的用户模型并将其保存到数据库中。
2.视图
它是用来展示应用程序的层。它用于向终端用户显示数据。
例如,如果你想创建一个用户视图,你将不得不创建与用户交互的UI组件,如一个易于理解的登录表单。
3.控制器
控制器是应用程序的逻辑层。它负责处理用户的请求并生成响应。它连接着视图和模型。
例如,控制器将负责验证用户的输入,然后它将把用户的输入传递给模型以保存用户。
MVC架构如何工作
控制器接收应用程序的请求,并将其传递给模型以发送和接收数据。
然后,视图使用来自控制器的数据来生成可呈现的信息给终端用户。视图只关心信息的呈现方式,而不关心最终的呈现方式。因此,是Html 文件渲染了来自控制器的信息。
然后,视图将其最终呈现发送给控制器,控制器再将响应发送给浏览器,浏览器再将响应显示给终端用户。
注意在一个可运行的应用程序中,模型、视图和其他组件是由控制器连接在一起的。
为了更好地理解这个概念,让我们看一下下面的例子。

让我们看看这里正在发生什么。
用户首先通过浏览器输入一个基于联系人ID的特定联系人记录。然后,浏览器向控制器发送请求,说它想要一个特定的联系记录。
然后,控制器与模型进行交互,以获得联系人记录。模型将从数据库中找到该记录,然后将其返回给控制器。
protected function findModel($id)
{
if (($model = Contact::findOne($id)) !== null) {
return $model;
}
throw new NotFoundHttpException('The requested page does not exist.');
}
然后,模型将从数据库中寻找记录,然后将其返回给控制器。
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'contact';
}
一旦控制器得到了记录,它就会与视图交互以产生响应。然后,视图将呈现该记录。
/**
* Displays a single Contact model.
* @param integer $id
* @return mixed
* @throws NotFoundHttpException if the model cannot be found
*/
public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
当视图收到请求时,它渲染记录并将其发送到控制器中HTML 。
<div class="contact-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'contact_id')->textInput() ?>
<?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'email')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'subject')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'body')->textInput(['maxlength' => true]) ?>
<div class="form-group">
<?= Html::submitButton('app'Save', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
然后,控制器将根据来自视图的HTML 文件对浏览器进行响应。
Model-View-Controller的好处
- 便于调试:由于应用程序被划分为不同的组件,在不干扰其他组件的情况下,更容易调试一个组件。例如,如果你想调试后端,你可以在不调试前端的情况下进行调试。
- 易用性:用户可以专注于手头的工作,而不必考虑如何使用该应用程序。
- 易扩展性:由于应用程序被划分为不同的组件,在不干扰其他组件的情况下,更容易添加新的组件。例如,如果你想添加一个新的后端,你可以在不修改前端的情况下进行。
总结
在本教程中,我们已经介绍了模型-视图-控制器架构的基本知识。我们也看到了MVC架构是如何工作的。
MVC最令人振奋的地方在于它不是一个单一的模式。相反,它是一组模式,一起用来构建一个复杂的应用程序。