【问题标题】:Are MVC frameworks confusing Views with Templates?MVC 框架是否会将视图与模板混淆?
【发布时间】:2010-11-04 00:01:24
【问题描述】:

我正在学习 MVC 来开发网站,但我发现与“理论”和当前广泛实施的(明显?)差异感到困惑。

originalMartin Fowler's article 中,MVC 概念似乎更倾向于“智能”视图,它直接与模型交互以检索要显示的数据,并自行决定数据应如何呈现。在网络上,这应该是输出格式(HTML、JSON、PDF 等)。

另一方面,ASP.NETZend 等当前框架中的视图似乎只不过是一个 HTML 模板。

这对我提出了一个问题:我可以为每种格式创建一个视图,但是我应该在这些框架中的什么位置决定要显示什么视图?控制器是否应该决定加载哪个视图?但是,控制器是否有责任知道正确的显示格式?这似乎与理论背道而驰。

您在使用 MVC 时是什么体验,需要输出不同的格式?

【问题讨论】:

  • 嗯,通常实际上是由请求对象决定的。您在控制器中获取请求对象,并根据参数将正确的对象/变量传递给视图。最好只有一个视图来显示许多不同但相似的页面(如果 HTML 80-90% 相同,那么冗余视图脚本没有意义,只需在视图脚本中使用简单的 if/else 等来决定做什么展示)。大多数框架都是这样做的,理论上是否合理,我不知道。

标签: asp.net-mvc model-view-controller zend-framework


【解决方案1】:

我认为你错过了这样一个事实,即当前框架中的视图做了很多工作来与模型通信以检索要显示的数据,并且这些视图基本上是模态锁定的(即 HTML 视图基本上显示 HTML , ETC。)。决定如何显示数据的“智能视图”的概念也有点混乱;例如,在 ASP.NET MVC 中,视图实际上会根据用户使用的浏览器以不同的方式呈现您的 HTML,所以有一点,但它们并没有完全改变呈现数据(例如视觉与听觉)。

【讨论】:

    【解决方案2】:

    我对真正 MVC 的体验仅限于 Zend 框架,而且我还很陌生。但这是我的意见(就其价值而言):

    在 Fowler 的文章中,他描述了一个 MVC,其中 C 和 V 完全不知道彼此。除了 C 和 V 可以交互之外,这一点很普遍。见Dean Helman's解释和ZF's explanation

    根据我的经验,控制器可以告诉视图,例如:“我想要此数据为 JSON”或“将此数据添加到导航”或“这是数据,我不在乎你去做吧。”

    编辑:我认为您可能会混淆 MVC 与MVP。看 What are MVP and MVC and what is the difference?

    【讨论】:

      【解决方案3】:

      有空格连接MVC,这也很重要。

      这个V 是干什么用的?访问模型的视图助手是 MV?是布局还是占位符?

      没有严格的定义,也没有人期望有严格的定义。这都是关于分离的,它可能会改变它的严格程度。

      作为Fatmuemoo noticed,您可能会感到困惑,或者可能是框架或 Fowler。

      有什么区别是一个让控制器决定,另一个视图助手做。但真正的事情是请求决定。你可以在渲染视图之前或之后处理它,这取决于你想要做什么,它仍然是 MVC。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        相关资源
        最近更新 更多