什么是MVC架构,它是如何工作的?

222 阅读4分钟

什么是MVC架构,它是如何工作的?

如今,开发人员已经改变了他们设计网站的模式。他们大多使用[Django]、[Rails]、[Laravel]、[Yii 2]等框架。

程序员利用各种模式和软件架构,使他们的代码更容易理解,并更快地开发应用程序。

Model-View-Controller Architecture (MVC) 是这些设计模式中的一种。MVC框架已经成为现代Web应用开发的一个重要组成部分。

在这篇文章中,我们将了解MVC框架,它的好处,以及如何开发高效的软件应用程序。

什么是框架?

一个Framework 是一个骨架解决方案(它给出了轮廓),其中必须插入特定的元素以建立一个坚实的解决方案。它们是由一组相关的类组成的,可以通过专业化来实现一个应用程序。

软件架构的定义

软件架构是一个系统的组织方式。这种组织方式涵盖了所有的组件,它们如何互动,操作环境,以及软件设计原则。

模型-视图-控制器架构

目前,MVC ,是开发人员正在使用的排名靠前的软件架构。它由三个相互联系的组件组成。这些组件是:

  1. 模型
  2. 视图
  3. 控制器

让我们看一下每个组件的功能。

1.模型

模型是为应用程序保存数据的层。该层负责存储和检索数据库中的数据,它还负责验证数据。

例如,如果你想创建一个新的用户,你将不得不创建一个新的用户模型并将其保存到数据库中。

2.视图

它是用来展示应用程序的层。它用于向终端用户显示数据。

例如,如果你想创建一个用户视图,你将不得不创建与用户交互的UI组件,如一个易于理解的登录表单。

3.控制器

控制器是应用程序的逻辑层。它负责处理用户的请求并生成响应。它连接着视图和模型。

例如,控制器将负责验证用户的输入,然后它将把用户的输入传递给模型以保存用户。

MVC架构如何工作

控制器接收应用程序的请求,并将其传递给模型以发送和接收数据。

然后,视图使用来自控制器的数据来生成可呈现的信息给终端用户。视图只关心信息的呈现方式,而不关心最终的呈现方式。因此,是Html 文件渲染了来自控制器的信息。

然后,视图将其最终呈现发送给控制器,控制器再将响应发送给浏览器,浏览器再将响应显示给终端用户。

注意在一个可运行的应用程序中,模型、视图和其他组件是由控制器连接在一起的。

为了更好地理解这个概念,让我们看一下下面的例子。

MVC Architecture

让我们看看这里正在发生什么。

用户首先通过浏览器输入一个基于联系人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最令人振奋的地方在于它不是一个单一的模式。相反,它是一组模式,一起用来构建一个复杂的应用程序。