当我们直接在视图中使用模型,遵循MVC结构,PHP时,这是一个很好的实践,它能提高性能吗?


Is it a good practice and can it improve the performance when we use the Model directly in the view, following MVC stucture, PHP?

我正在使用Yii框架2.0。但这个问题是针对MVC的。我了解MVC是如何工作的,但我想知道它是否是一个很好的做法,它可以提高一个网站的性能,当我们使用一个模型直接在一个视图内,而不通过控制器传递它。下面是我的示例代码:

class MyModel {
     public static function doAction() {
         // do something here...
     }
     public function getPizza() {
         // return pizza ..
     }
}

在我的sample_view1.php:

<?php MyModel::doAction(); ?>

在我的sample_view2.php中:

<?php
     $myModel = new MyModel();
     echo $myModel->getPizza();
?>

对我来说,我认为它可能会提高性能,因为控制器不需要处理模型并将其传递给视图。但我不确定。我读过一些与此相关的文章。但每个人都有自己的看法。

正如在关于组件定义角色的评论中提到的,当模型包含逻辑,视图包含表示和控制器管理它们如何一起工作时。这是熟悉MVC模式的程序员要牢记的。他希望这些东西会在该放的地方。

在您的示例<?php MyModel::doAction(); ?>中,看起来doAction()响应显示一些数据。在视图中找到它有点出乎意料和令人困惑。当你创建一个下拉列表或无线电输入列表时,你可以使用像<?php MyModel::doAction(); ?>这样的结构,例如

<?= Html::dropDownList( MyModel::getSomeList() ) ?>

关于在视图中实例化模型类并获得一些要显示的数据:

<?php
     $myModel = new MyModel();
     echo $myModel->getPizza();
?>

这只是一个例子,但如果你需要更多的方法调用之前,你可以调用getPizza() ?例如

<?php
     $myModel = new MyModel();
     $myModel->prepare();
     $myModel->check();
     //and so on...
     //and finally
     echo $myModel->getPizza();
?>

视图变得混乱。看看下面的代码片段:<?= $pizza ?>,当您将$pizza作为参数从控制器传递给view时。它看起来又漂亮又干净。那么为什么要降低可读性呢?

MVC与性能无关。是关于建筑的。某种方法。在你的情况下,性能的改进将是微不足道的。

如果你用另一种方式思考——你应该忘记OOP而考虑过程。

我的建议是不要在视图中直接使用模型