我正在使用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而考虑过程。
我的建议是不要在视图中直接使用模型