在视图中或仅在控制器中检索模型数据是否正确?

时间:2010-12-22 19:23:15

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

我有一个MVC应用程序,我通常让控制器传递视图所需的一切。但是当我的视图嵌套在其他视图中时,将这些变量转发到嵌套视图是一件痛苦的事。

这是怎么回事,或者我应该允许嵌套在我的视图中的部分/片段从模型中检索数据?

作为一个例子,我有一个状态列表,我在几个嵌套的部分/片段中使用。每次我只想在这些视图中的嵌套部分/片段上使用它时,我必须通过我的视图传递此列表。看起来它很容易出错,感觉不是很干。

4 个答案:

答案 0 :(得分:3)

View 永远 事实上,MVC范例的重点是每个组件与另一个组件松散耦合。因此,您可以轻松交换我们的模型或视图。如果将模型代码放在View中,则无法执行此操作。

助手或其他模块倾向于缓解这些情况下的痛苦。我建议调查那些。还有“Fat Models,Skinny Controllers”的概念,在您的模型中添加更多内容,因此更容易访问跨多个控制器共享的数据。

最后,这取决于你。 MVC线可能变得模糊。但是,IMO直接从View访问模型违反了核心概念。

答案 1 :(得分:3)

直接从模型中读取视图是完全有效的。

查看维基百科文章或Martin Fowler的照片:http://martinfowler.com/eaaCatalog/modelViewController.html

答案 2 :(得分:0)

在几个小型MVC“小部件”(控制器)上拆分主applogic,其中每个“小部件”都与Model有关系并拥有独立的View。然后,在执行应用程序期间,您只需在运行时执行小部件,并传递给主模板“READY小部件视图”。

这里描述了类似的东西: http://en.wikipedia.org/wiki/Presentation-abstraction-control

优点:

  • 你不打破MVC(至少这么多) IMO,它比调用模型更好 视图)
  • 不仅要保持结构 代码库通常是applogic /用例 在stanalone小部件中描述(每个小部件都有自己的模板)
  • 小部件 更容易测试

答案 3 :(得分:0)

如果您担心应用程序的速度性能,并且希望使其更直接,我会说您允许视图从模型中读取数据(只读)。当控制器和视图必须同步时,它会更复杂。视图需要的数据和控制器应提供给视图的数据。当视图可以直接访问模型时,您无需验证控制器是否提供此数据。

关于MVC概念基于松散耦合的论点,没有矛盾,因为Model仍然是独立的,不依赖于视图或控制器。控制器和视图之间的区别在于控制器可以推送到(从)模型,而视图只能从模型中提取。