2009-01-06 143 views

回答

0

Zend Framework有自己非常好的Quick Start/Tutorial,它特别介绍MVC。从那里

报价:

那么究竟什么是这个MVC模式 大家都在谈论,为什么 要照顾吗? MVC远不止 只是一个三个字母的缩写(TLA),你可以随时随地抽出你想要的 听起来聪明;它已成为现代 网络应用程序设计中标准的 。理由很充分。 大多数网络应用程序代码都属于 以下三类之一: 演示文稿,业务逻辑和数据 访问。 MVC模式很好地模拟了这种关注的分离。结果 结果是您的演示代码 可以合并在您的应用程序的一个部分 您的业务 逻辑在另一个和您的数据访问 代码在另一个。许多开发者 已经发现这个明确定义的 分隔是必不可少的,以保持 他们的代码有组织,特别是当多个开发人员在 上工作的 相同的应用程序。

2

有迹象表明,给MVC的概念解释,#2其他几个问题:

概念的一个很好的解释可以上找到Wikipedia

模型 - 视图 - 控制器(MVC)是 工程中使用的 架构模式。成功使用 图案的从 用户接口的考虑隔离的业务逻辑, 造成一个应用程序,它是 易于修改或者视觉外观 应用或 底层业务规则,而不 影响其他。在MVC中,型号 代表应用程序的信息(数据) ;视图 对应于用户界面的元素,例如文本,复选框 项目等等;并且 控制器管理数据的通信 和用于 的业务规则处理来自 模型的数据。

关于Zend框架

+0

几乎正确。除非你正在研究一个简单的应用程序,否则Zend_Db_Table不是模型的充分基础。查看http://codeutopia.net/blog/2008/12/06/food-for-thought-utilizing-models-in-mvc/了解更多细节。 – 2009-01-06 17:40:16

-1

在为几句话越好:

  • 模型是DB
  • 的观点是你所看到的(页)
  • 控制器胶水(逻辑)

您的模型知道如何访问包含您的数据的表格;你的观点知道如何显示内容;和你的控制器粘在一起(我显示什么视图?我应该使用什么模型?)。

+0

控制器更像是一个“服务孵化器”,而模型实际上包含很多逻辑。这不仅仅是数据库。访问数据库可以成为模型逻辑的一部分。 – magnetronnie 2014-10-10 11:30:39

5

M - 模型 - 往往是混乱的最大来源。这些是您的应用程序的一部分,它们完成所有'繁重工作' - 它们处理数据库访问,执行复杂的特定于应用程序的逻辑,并负责应用程序的大部分工作。与视图和控制器不同,Zend Framework没有模型的基类 - 这是因为他们所做的没有真正的一致性。一些框架(比如Ruby on Rails)尝试将某种数据库包装器作为Model的基础,但是有很多情况(第三方提要/ API,静态文件,非持久计算,跨多个表的概念.. ),对此,充其量只是一种误导性的做法。模型是应用程序中仍然被迫编程的部分,框架无法真正为您节省时间。

V - 视图 - 是这里最简单的组件。他们应该是简单的PHP/HTML模板。他们被赋予视图对象,数组,字符串等,然后将它们放入页面中。这里不应该有太多(如果有的话)复杂的逻辑 - 循环这些,显示这个(如果定义),斑马条纹这个表和什么。 View Helper有一些魔术(例如魔术般地呈现Zend_Form的助手),但这对理解整个系统并不重要。

C - 控制器 - 从最广泛的意义上讲,控制器负责接收用户请求,将它们发送到Model对象并准备将模型交给Views。这是将所有东西放在一起的胶水。如果您使用的是Zend MVC,那么您需要关注2个控制器 - Zend_Controller_FrontZend_Controller_Action

Zend_Controller_Front(如果您使用Zend_Layout::startMVC(),您可以免费获得)是应用程序的单一入口 - 它处理原始用户请求并将URL转换为要调用的Action。有很多地方可以对此进行“插件”来处理身份验证和访问限制等问题,但核心只是前门处的“交通警察”来指导传入的请求。

Zend_Controller_Action是动作的基类 - 本质上,Action表示应用程序执行的操作(登录,列出博客条目,启动ICBM,订购匹萨...),但不直接负责实际操作。 Action控制器非常无聊 - 它们从表单和URL中抽取值,在Model类上调用几个方法来实际执行操作并将结果推送到视图中。如前所述,它们是将模型和视图放在一起的“粘合剂”。

一个粗略的测试,看看你是否沿着正确的路线分裂东西,是想象你的网站发生重大变化。视觉重新设计将几乎完全在视图中处理。移动所有网址会改变您的控制器。从Web应用程序转换为GUI应用程序将取代视图和控制器,但您的模型仍然大部分未更改。如果你重写你的模型,你有一个全新的应用程序。