【问题标题】:Source of View Data in MVC Pattern: View or Controller?MVC 模式中视图数据的来源:视图还是控制器?
【发布时间】:2016-05-12 18:55:17
【问题描述】:

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

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

以下是我认为每种设置的优势:

控制器将数据传递给视图

1) 有道理,既然控制器只负责更新模型,那么它也应该单独负责从它们中查询

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

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

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

View 直接从模型中获取数据

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

2) 与 1) 相关,明显不同的视图/模板可以很容易地被控制器调用而无需关心它,因为视图负责获取它们自己需要的任何数据。考虑两个版本的主页或管理控制台。每个版本可以包含不同类型的数据,因此,根据使用的版本,需要不同的模型集或模型调用。

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

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

【问题讨论】:

  • 问一个问题,你肯定认为你知道答案。此外,MVC 的全部意义在于视图不能直接访问模型:因此,您的第二个示例“视图直接从模型中获取数据”在其表面上存在缺陷
  • 每个人对MVC都有不同的看法,所以很难说。我只能指给你链接stackoverflow.com/questions/1973221/…。对我来说,MVC 是建立在 SoC 之上的。尽管如此,有很多关于此的 SO 帖子。
  • @George Jempty。如果我已经知道答案,为什么还要浪费时间问一个问题?许多可用的文章仅涉及 MVC 的理论和基础知识。我已经有足够长的时间了解每种情况的一些(但不是全部)含义,但是没有实际实施的经验来倾向于一种或另一种方式。如果您觉得指导不如您聪明的人是可鄙的,请不要发表讽刺的言论。没用。
  • @Andrew。感谢您的链接
  • @alds 不管怎样,先使用谷歌和维基百科,而不是用一个垃圾问题来堵住 SO

标签: php design-patterns model-view-controller


【解决方案1】:

传统上,控制器将数据从模型传送到视图。此外,如果您遵循传统,控制器不应该转换模型中的数据,因为模型本身应该做所有的逻辑工作,控制器只是为了搭建舞台。如果可能,视图应包含零逻辑。如果视图包含自己的逻辑,则单元测试变得更加困难。像把手和树枝这样的模板框架故意让注入你自己的逻辑变得更加困难,但是它们通常确实提供了一些流控制,所以我想你不能说它们是真正的无逻辑的。

【讨论】:

    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 2012-02-09
    • 2011-09-12
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2013-02-20
    • 2018-05-24
    相关资源
    最近更新 更多