Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MVC模式中的视图数据源:视图还是控制器?_Php_Design Patterns_Model View Controller - Fatal编程技术网

Php MVC模式中的视图数据源:视图还是控制器?

Php MVC模式中的视图数据源:视图还是控制器?,php,design-patterns,model-view-controller,Php,Design Patterns,Model View Controller,我目前正在研究PHP的MVC模式,但对这方面感到困惑: 控制器是负责从模型获取数据并传递到视图,还是视图应该直接从模型检索数据? 以下是我对每种设置的感知优势: 控制器将数据传递给视图 1) 因为控制器只负责更新模型,所以它也应该只负责查询模型 2) 相对于1),模型实例不必注入视图,只需注入实际数据,因此两者之间的耦合更少/没有耦合。控制器是唯一“应用程序感知”的组件,因为模型和视图只是在不同的应用程序中重用/插入 3) 视图可以轻松切换,尤其是在显示相同数据的情况下(例如,产品页面的不同主题

我目前正在研究PHP的MVC模式,但对这方面感到困惑:

控制器是负责从模型获取数据并传递到视图,还是视图应该直接从模型检索数据?

以下是我对每种设置的感知优势:

控制器将数据传递给视图

1) 因为控制器只负责更新模型,所以它也应该只负责查询模型

2) 相对于1),模型实例不必注入视图,只需注入实际数据,因此两者之间的耦合更少/没有耦合。控制器是唯一“应用程序感知”的组件,因为模型和视图只是在不同的应用程序中重用/插入

3) 视图可以轻松切换,尤其是在显示相同数据的情况下(例如,产品页面的不同主题/设计)。控制器从模型中检索相同的数据并传递到视图,而不考虑主题

4) 视图可以很容易地打包为HTML文件,并为设计团队划分,而控制器和模型则为开发团队打包为类

视图直接从模型获取数据

1) 控制器和视图之间的耦合更少,因为控制器不需要事先知道数据视图的精确显示;控制器只是传递UI输入

2) 与1)相关,控制器可以轻松调用明显不同的视图/模板,而无需担心,因为视图负责获取自己需要的任何数据。考虑两个版本的主页或管理控制台。每个版本可以包含不同类型的数据,因此需要不同的模型集或模型调用,具体取决于所使用的版本

3) 如果使用可选的setter方法将视图/模板打包为类以修改其外观,则视图/模板更易于自定义和重用。如果没有,每个视图都必须分成两个文件:a)视图逻辑(在PHP中)和b)视图模板(显示最小PHP变量的HTML标记)


如果可能,请提供一个与框架无关的响应。谢谢

传统上,控制器将数据从模型传递到视图。此外,如果您遵循传统,控制器不应该转换模型中的数据,因为模型本身应该完成所有逻辑工作,控制器只是用来设置舞台。如果可能,视图应该包含零逻辑。如果视图包含自己的逻辑,那么单元测试就变得更加困难。像Handlebar和twig这样的模板框架故意使注入您自己的逻辑变得更加困难,但是它们通常提供一些流控制,所以我想您不能说它们是真正的无逻辑的。

问一个问题,您肯定会认为您知道答案。此外,MVC的全部要点是视图不直接访问模型:因此,您的第二个示例“视图直接从模型获取数据”在其外观上存在缺陷每个人对MVC都有不同的看法,因此很难说。我只能给你指出链接。对我来说,MVC是建立在SoC的基础上的。尽管如此,还是有很多关于这个的帖子。@georgejempty。如果我已经知道答案,为什么还要浪费时间问问题?许多可用的文章只涉及MVC的理论和基础。我已经了解了每个案例的一些(但不是全部)含义,但没有以这种或那种方式进行精益实践的经验。如果你觉得引导不如你聪明的人是可鄙的,那就不要发表你的讽刺言论。“这没用。”安德鲁。谢谢你的邀请link@alds不管怎样,先使用谷歌和维基百科,而不是用一个垃圾问题来堵塞