我的MVC组件真的都需要相互引用吗?

djb*_*djb 4 php model-view-controller

我在PHP中玩MVC.我没有使用框架,我只是想了解模式.

有时我会看到控制器,例如在本教程中,使用传递给构造函数的模型和视图进行实例化,并且在同一个教程中,视图(此处为"模板")类在构造函数中使用Controller!

所以我的问题是:

  1. 为什么视图需要引用其控制器?在这种关系中,观点不应该成为被动的伙伴吗?
  2. 控制器是否应该对特定型号进行内部参考?换句话说,为什么不在控制器动作中实例化模型并以这种方式使用它们呢?

Gor*_*don 9

鉴于MVC在网络上的许多变化和误解,我投票将这个问题视为非建设性的.由于评论规模有限,我将此答案作为社区Wiki提供.

在此输入图像描述

MVC最初是由Trygve Reenskaug为桌面环境构思的,而不是为网络构思的.我们现在看到的主要是某些形式的原始模式的变体,如MVP,HMVC,Model2-MVC等.他们的实现彼此不同,人们花了很多时间来讨论"MVC"究竟是什么或者应该如何实现.

在此输入图像描述

就个人而言,我更喜欢MVC的企业应用程序架构定义模式,它说MVC 将用户界面交互分成三个不同的角色,因为这个定义没有实现的概念.

在书中,福勒指出,最重要的区别是模型与控制器和视图的分离.虽然本书确实涵盖了角色之间的关联,但我认为重点是理解并关注角色而不是实现.

设计模式是蓝图,而不是详细的原理图.此外,MVC是一种模式语言.它的目标是为项目添加结构/表单.了解角色的用途,然后提出适用于您的项目的实现.

在此输入图像描述

Fowler还有一篇关于GUI体系结构的长篇文章,涵盖了MVC,详细解释了关联和依赖关系,如果你没有这本书的话.

图片/幻灯片:建筑失落的岁月(Robert Cecil Martin; 2011年11月4日)