5

我正在学习Zend 框架,它使用 MVC 模型。

我仍然不明白 MVC模型、视图、控制器是什么。

这三个不同的领域是什么?程序流程会是什么样子?

4

4 回答 4

5

M - 模型 - 通常是最大的混乱来源。这些是您的应用程序中完成所有“繁重工作”的部分——它们处理数据库访问、执行复杂的应用程序特定逻辑并负责您的应用程序“所做”的大部分工作。与视图和控制器不同,Zend 框架没有模型的基类——这是因为它们所做的事情并没有真正的一致性。一些框架(如 Ruby on Rails)试图提供某种数据库包装器作为模型的基础,但也有很多情况(第 3 方提要/API、静态文件、非持久性计算、跨越多个表的概念...... .) 这充其量是一种误导性的做法。模型是应用程序的一部分,你仍然被迫编程,而框架可以'

V - 视图 - 是这里最简单的组件。它们应该是简单的 PHP/HTML 模板。他们获得视图对象、数组、字符串等,然后将它们放入页面中。这里不应该有太多(如果有的话)复杂的逻辑 - 循环这些,显示这个(如果定义),斑马条纹这个表等等。View Helpers 发生了一些神奇的事情(例如神奇地渲染 a 的助手Zend_Form),但这对于理解整个系统并不是必需的。

C - 控制器 - 从最广泛的意义上说,控制器负责接受用户请求,将它们发送到模型对象并准备模型以传递给视图。它是把所有东西粘在一起的胶水。如果您使用 Zend MVC,您会关心 2 个控制器 -Zend_Controller_FrontZend_Controller_Action.

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

Zend_Controller_Action是动作的基类 - 本质上,动作代表您的应用程序所做的事情(登录、列出博客条目、启动洲际弹道导弹、订购比萨饼......),但并不直接负责实际执行。动作控制器非常无聊——它们从表单和 URL 中提取值,调用模型类上的一些方法来实际执行动作并将结果推送到视图中。如前所述,它们是将模型和视图粘合在一起的“粘合剂”。

一个粗略的测试,看看你是否沿着正确的路线拆分事情是设想对你的网站进行重大更改。视觉重新设计几乎完全在视图中处理。移动你所有的 URL 会改变你的控制器。从 Web 应用程序转换为 GUI 应用程序将替换视图和控制器,但您的模型仍将基本保持不变。如果您重写模型,您将拥有一个全新的应用程序。

于 2009-01-06T18:31:16.407 回答
2

Stackoverflow 上还有其他几个问题可以解释 MVC 概念:

可以在Wikipedia上找到对该概念的非常好的解释:

模型-视图-控制器 (MVC) 是一种用于软件工程的架构模式。该模式的成功使用将业务逻辑与用户界面考虑隔离开来,从而使应用程序更容易修改应用程序的视觉外观或底层业务规则,而不会影响另一个。在 MVC 中,模型代表应用程序的信息(数据);视图对应于用户界面的元素,例如文本、复选框项目等;控制器管理数据的通信以及用于操作数据进出模型的业务规则。

关于Zend 框架

于 2009-01-06T11:09:36.033 回答
0

Zend 框架有它自己非常好的快速入门/教程,其中特别介绍了 MVC。

从那里引用:

那么这个每个人都在谈论的 MVC 模式到底是什么,你为什么要关心呢?MVC 不仅仅是一个三字母的首字母缩写词 (TLA),您可以在任何时候想要听起来很聪明,就可以将它拿出来;它已成为现代 Web 应用程序设计的标准。并且有充分的理由。大多数 Web 应用程序代码属于以下三个类别之一:表示、业务逻辑和数据访问。MVC 模式很好地模拟了这种关注点分离。最终结果是,您的演示代码可以合并到应用程序的一个部分中,业务逻辑在另一个部分中,您的数据访问代码在另一个部分中。许多开发人员发现这种定义明确的分离对于保持代码的组织性是必不可少的,

于 2009-01-06T10:55:35.077 回答
-1

用尽可能少的词:

  • 模型是数据库
  • 视图就是你所看到的(页面)
  • 控制器是胶水(逻辑)

您的模型知道如何访问包含您的数据的表;您的视图知道如何显示内容;并且您的控制器将它们粘合在一起(我显示什么视图?我应该使用什么模型?)。

于 2009-01-06T14:52:22.590 回答