MVC:模型与视图交互?

时间:2010-04-27 04:14:28

标签: php model-view-controller

我知道一切都在通过控制器。

但我经常阅读这样的文章:

  1. 用户与视图互动
  2. 控制器要求模型更改其状态
  3. 模型在其状态发生变化时通知视图
  4. 我没有得到第三个。为什么说模型通知视图,当它实际通知控制器并且控制器正在通知视图时?

4 个答案:

答案 0 :(得分:3)

这看起来更像是一个桌面系统而不是像网站这样的无状态系统。

但也许它正在讨论一些人如何从视图中查询模型,例如。

<?php foreach( $usersTableGateway->getUsers() as $user ): ?>
<?php echo $user ?><br>
<?php endforeach; ?>

我更喜欢在控制器中获取所有信息(在控制器中准备用户数组)并将其传递给控制器​​的视图。

答案 1 :(得分:2)

MVC是一个广泛的概念,并且有各种各样的可能实现。例如,页面控制器将逻辑与视图分开,Front Fontroller也是如此。每个MVC框架也有不同的方法在视图中呈现模型数据 - 例如Zend使用两步法。

你可能在视图对象和“模型”之间建立一个Observer关系(它本身就是一个非常复杂的野兽),但我认为MVC模式的这个方面更多地与模式的原始上下文有关。 - 即盖伦的观点

答案 2 :(得分:1)

我确实偶尔会看到MVC以这种方式描述或以这种方式绘制。我不会说这是正确的,但我认为它来自许多实现,它们明确地或隐含地将控制器和模型结合在一起。

如果框架在控制器和模型之间的概念分离并不像它们应该的那样清晰,那么关于“模型在其状态发生变化时通知视图”的部分实际上是一个恰好位于控制器位的控制器位。模特。

最后,MVC是一个主要依赖于明确分离关注点的指南。如果您使用的框架以这种方式描述事物......那么,它不是真正的MVC。它可能会起作用,但它也可能以意外或甚至未被发现的方式失败。

答案 3 :(得分:1)

让View直接听你的模型并不违反MVC原则(见here)。 ASAIK是MVC的一个坚如磐石的规则,实际上你有一个胖的,盲目的模型,它保护数据和业务逻辑,并且不知道系统的其他部分。描述视图和控制器的方式及其与模型的关系不太严格。