为什么要将MVC中的View拆分为视图类和模板

时间:2012-11-05 23:46:16

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

我对设计模式比较陌生,但我觉得我对MVC模式以及这种代码分离带来的好处有了很好的理解。

然而,两次我都看到了MVC模式(Magento和Joomla!),还有一些专业化, view 包含一个视图类(Magento块)和一个PHP模板文件。如果有人能解释这种分裂的好处,我将不胜感激。

我也不知道如何在视图类和模板文件之间拆分代码。有时我发现自己正在编写一个看似冗余的视图类(在Joomla!中),它只是访问模型然后只是为模板提供数据。什么代码应该出现在模板中,哪些代码应该出现在视图类中?

5 个答案:

答案 0 :(得分:6)

在MVC风格的设计模式中,View负责所有UI逻辑。他们应该从模型层请求信息,并根据他们收到的信息,选择应该使用哪些模板来创建响应。或者即使需要任何渲染(视图也可以发送HTTP标头)。

  

你可以说在经典MVC和Model2 MVC模式中,视图只从模型层读取,但控制器只写入它。

如果从模型层收到一些错误状态,则视图将采用主布局模板并对其进行补充,该模板包含错误消息的HTML片段。然后它将整个事物组装成一个用户(在Web应用程序是浏览器的情况下)。

基本Web应用程序中的模板只是带有标签和php变量混合的简单文件。

答案 1 :(得分:3)

您可以将view视为what,将模板视为how

视图使用模型准备数据,并将此数据提供给模板。

反过来,模板通常在视图的范围内调用(至少在Joomla!中)。

这一开始可能看起来有点多余,但在使用模板覆盖时会显示出这种方法的强大功能。然后,视图可以保持不变,只覆盖模板(或者子模板)。

即使使用相同的主(Joomla!)模板,您也可以指定一个不同的视图模板作为参数,以防您需要一些特殊的演示。这也消除了代码重复

例如,假设您创建了一个新的主模板。您可以覆盖某些默认视图/模板,并保持其他一些不受影响。然后,您可以创建一个新的视图,例如博客视图,还有2个模板,光线间距黑暗密集,用于两种不同的场景。这样,您只有一个视图可以准备所有what和几个不同的模板来处理how

答案 2 :(得分:2)

在一般情况下,“视图”和“模板”之间的分割是这样的,如果您要通过不同的方法呈现视图数据[即。 HTML,XML,JSON等]然后你不需要继续重写'View'类,只需要创建新的'Template'类。如果您想将AJAX调用合并到前端,或者从其他应用程序(例如智能手机应用程序)拨打电话,这非常有用。

答案 3 :(得分:0)

阅读此http://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.html。对我来说MVC意味着将函数注册到数组并循环遍历该数组并最终调用主程序中的函数。但对于许多人来说,似乎将模型(数据库)与视图(html模板)和控制器(主应用程序)分开。但这不是我认为对程序特别的。当你自然地开发Web应用程序时,你拥有所有这些后端,如数据库,浏览器,后端和前端,html,css,图像文件,视频文件和php语言等。为什么这会被混淆的单词混淆开发?我认为MVC通用是有用的。学习装饰模式它更有用。

答案 4 :(得分:0)

说实话......性能的最佳选择是在后端创建Web服务并使用javascript库与服务器通信。 joomla和其他cms发行版尝试将这两种设计模式抽象到MVC中,从而导致MVC和Web服务/客户端代码的混合。这种混合性质允许扩展扩展到javascript格局,这似乎是网络的发展方向。