14

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

然而,我两次都看到了 MVC 模式的实际应用(Magento 和 Joomla!),还有进一步的专门化,视图由视图类(Magento 块)和 PHP 模板文件组成。如果有人能解释这种分裂的好处,我将不胜感激。

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

4

5 回答 5

6

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

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

如果您从模型层收到一些错误状态,视图将采用主布局模板并补充它的模板,该模板包含错误消息的 HTML 片段。然后它将整个东西组装起来向用户展示(在 Web 应用程序的情况下是浏览器)。

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

于 2012-11-06T00:41:43.253 回答
3

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

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

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

起初这似乎有点多余,但是当使用模板覆盖时,这种方法的威力就会显现出来。然后,可以单独保留视图,仅覆盖模板(或子模板,就此而言)。

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

例如,假设您创建了一个新的主模板。您可以覆盖一些默认视图/模板,而其他一些则保持不变。然后,您可以创建一个新视图,例如博客视图,以及 2 个模板,浅色间隔深色密集,用于 2 个不同的场景。这样,您只有一个视图来准备所有what和几个不同的模板来处理how.

于 2012-11-06T00:08:13.717 回答
2

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

于 2012-11-06T00:03:17.400 回答
0

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

于 2012-11-06T00:27:33.207 回答
0

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

于 2012-11-06T00:10:36.840 回答