2012-11-05 31 views
14

我对设计模式比较陌生,但我觉得我对MVC模式以及代码分离带来的好处有了很好的理解。为什么要将MVC中的视图分解为视图类和模板

不过,两次我已经看到了行动(Magento的和Joomla!)MVC模式,有进一步专业化,与视图同时包含一个视图类(Magento的块)和一个PHP模板文件。如果有人能够解释这一分裂的好处,我将不胜感激。

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

回答

2

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

3

您可以将view设置为what,将模板设置为how

视图通过使用模型来准备数据,并使该数据可用于模板。

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

这似乎是在第一类的冗余,但使用模板时,将覆盖这种方法的力量显现出来。然后,视图可以单独存在,并且只有模板(或者这个问题的子模板)被覆盖。

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

例如,假设您创建一个新的主模板。您可以覆盖一些默认的视图/模板,并保留其他一些不变的内容。然后,您可以创建一个新视图,说:博客查看​​,也是2模板吧,光间隔黑暗密,在2个不同的场景下使用。这样,您只有一个视图来准备所有的what和几个不同的模板来照顾how

+1

我认为,MVC范式的全部内容是模型是**什么**和视图是**如何**。 – Dom

+0

我的编辑在五分钟的规则中迷失了,上面的其他内容应该阅读。据我所知,使用Joomala时!有三个领域可以控制如何呈现模型的内容,这些领域是:1)视图2)模板和3)样式表。您能否提供一个示例显示演示文稿应该如何以及为什么在这些位置之间进行分区。 – Dom

+0

你可以找到一个关于内容重写的解释,这是这种分离最常见的用例[这里](http://docs.joomla.org/Understanding_Output_Overrides)。即使您的默认安装模板也有内置覆盖。视图被用作获取数据并将其分配给变量的常见代码片段,然后调用渲染部分,这是视图的模板(在Joomla!中称为“布局”)。可以在这里找到一个简短的解释(http://docs.joomla.org/How_to_override_the_output_from_the_Joomla!_core)。 – MasterAM

0

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

0

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

+1

这与视图和模板的分离有什么关系? –

6

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

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

如果您收到来自模型层的一些错误状态,认为作为主要布局模板和补充它的模板,这是包含错误信息的HTML片段。然后它将整个事件集合到用户(在Web应用程序中是浏览器的情况下)。

在您的基本Web应用程序中,模板只是简单的文件,其中混合了标签和php变量。

+1

视图不应从模型请求数据。 Controller从Model请求数据,并使其(某些)可用于View。视图的责任是使用控制器公开的数据来呈现模板 –

+7

是的,不要相信[只有MVC Gold Badge]的家伙(http://stackoverflow.com/help/badges/3849/model-查看控制器)上SO – Fabor

+1

@MihaiRăducanu也许[这(稍微更新)后](http://stackoverflow.com/a/16596704/727208)将帮助你了解我的方法背后的原因。 –

相关问题