首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC通过Zend的ViewHelper调用模型

MVC通过Zend的ViewHelper调用模型
EN

Software Engineering用户
提问于 2017-03-10 16:20:33
回答 2查看 353关注 0票数 5

最近,我和我的一位同事就以下问题进行了辩论:

我声称通过Zend的ViewHelper直接加载一个模型并不是MVC明智和良好的实践,因为它是一个与视图相关的东西,它应该通过严格的接受来调用另一个控制器。

我的同事声称相反,ViewHelper在呈现存在于.phtml文件中的视图之前被调用,因此它可以调用所需的任何模型和/或服务。

所以我想知道谁声称最符合MVC-理智的声明。

请记住,引发这场争论的问题在于我们开发的web应用程序;我们需要显示HTML的可重用组件,这些组件被当作小部件处理,并通过Ajax呈现它们将减缓整个站点的速度。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2017-03-10 22:21:35

原始MVC模型中,控制器与视图和模型交互。视图由更改模型通知,并可以访问模型内容以查看:

对于任何给定的模型,都有一个或多个视图,每个视图都能够在屏幕和硬拷贝上显示模型的一个或多个图形表示。视图还能够在与该视图合理关联的模型上执行此类操作。 - Trygve,MVC的发明者

将数据加载到模型中不是一种显示操作。这是内存中模型数据的一个变化。这应该由控制器触发,而不是由视图触发。顺便说一句,大多数MVC变体,例如MVP,都应用了类似的逻辑(例如,视图只显示而从不更改模型)。

然而,根据Zend的手册,MVC的似乎有自己的理解

视图-视图准确地定义了呈现给用户的内容。通常,控制器将数据传递给每个视图以某种格式呈现。视图也经常从用户那里收集数据。在这里,您可能会在MVC应用程序中找到HTML标记。

在真正的MVC中,视图从不收集数据。

结论:你完全正确!尽管如此,在Zend哲学中并没有使用纯MVC,所以您的同事可能不会完全错误。

票数 3
EN

Software Engineering用户

发布于 2017-03-11 05:55:49

在您的视图脚本中,经常需要一遍又一遍地执行某些复杂的功能:例如格式化日期、生成表单元素或显示操作链接。您可以使用助手类为您执行这些行为。zend:查看助手

除其他外,这告诉我们视图助手不是视图。它是视图使用的实用程序。

通过Zend的ViewHelper直接加载一个模型并不是MVC明智和良好的实践,因为它是一个与视图相关的东西,它应该通过严格的接受来调用另一个控制器。

该模型包含数据。其中一些数据需要显示在视图中。因此,声称这只是为了“查看相关的东西”并不能给你一个很好的明确的切断。

我所知道的反对这一观点的最佳理由是,视图不应该对模型进行投票。如果视图等待被告知是时候更新和显示什么,那就更好了。视图不应该知道或关心是否是模型告诉它这一点。这种智慧不是来自MVC。它来自告诉你,别问

ViewHelper在呈现存在于.phtml文件中的视图之前被调用,因此它可以调用所需的任何模型和/或服务。

这使得ViewHelper听起来像一个控制器。如果这是真的,那就没事了。但这不是视图所使用的实用程序应该做的事情。如果是这样的话,他们应该关注提供视图、显示正确接收的数据所需的行为。zend文档似乎就是这么说的。

MVC是一个非常古老的设计模式。MVC实现的唯一一致之处在于三个方面的责任。其他的一切:区域之间的交流,依赖,控制的流动,都在空中。告诉我你在使用MVC并不能告诉我多少。理智与否。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/343898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档