2010-11-04 47 views
2

我正在学习MVC开发一个网站,我发现混淆了“理论”和当前广泛实现的(明显的)差异。MVC框架是否将视图与模板混淆?

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

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

这对我提出了一个问题:我可以为每个格式的浏览,但后来我在这些框架应该在哪里决定什么视图显示?控制器应该决定加载哪个视图?但是,那么控制者有责任知道显示的格式吗?这似乎违背了理论。

使用MVC时您有什么经验,您需要输出不同的格式?

+0

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

回答

0

我对一个真正的MVC的经验仅限于Zend框架,我仍然很绿。但是,这是我的意见(什么它的价值):

在福勒的文章中,他描述了一个MVC哪里哪里C和V完全不知道对方。 C和V可以相互作用是广泛的例外。请参阅Dean Helman's说明和ZF's explanation

这是我的经验,控制器可以告诉视图,例如:“我想这个数据为JSON”或“添加这个数据到导航”或“这里是数据,我不在乎什么你用它做。“

编辑:我想你可能会混淆MVC 与MVP。见 What are MVP and MVC and what is the difference?

1

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

0

有空格它连接MVC,这也是非常重要的。

这是什么V是为了?访问模型MV的查看助手是否?布局或占位符呢?

没有严格的定义,也没有人期待严格的定义。这与分离有关,它可能会有所不同。

由于Fatmuemoo noticed它可能是你迷惑,或者也许是框架或福勒。

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