php - 这些 MVC 层正确吗?

标签 php zend-framework model-view-controller design-patterns

我正在使用 Zend Framework 的完整 MVC 功能编写一个 Web 应用程序,包括服务层、域模型和映射器。我认为我对各层的理解是正确的,但想确认一下。

上层依赖于下层,因此从顶部开始:

  1. Controller - 最顶层。高度依赖于它实例化、填充和渲染的 View 。依赖于服务来访问模型。

  2. View - 不知道 Controller 。有时取决于服务或模型,例如填充选择控件的查找列表。

  3. 服务 - 向客户端(例如 Controller )提供 API。高度依赖模型。事实上,服务通常在模型的映射器部分和域部分之间进行协调,以便为客户端完成工作。

  4. 映射器(模型,A 部分) - 对域有深入的了解,可以操作域对象以适应关系数据存储,并操作关系数据来创建新的域对象。

  5. 域模型(模型,B 部分)- 包含域逻辑。域对象不知道其他层,但是由于它们需要访问其他域对象,因此它们可以将映射器作为“对象查找器”访问。

这听起来对吗?我错过了什么?

最佳答案

嗯。在一些细节上有点错误

MVC 中有两个主要层:

  • 模型层:处理所有领域业务逻辑、规则和信息
  • 表示层:处理界面和交互性

Controller 不是“最顶层”。它们是表示层的一部分,其职责是处理用户的请求并传递提取的信息以更改模型层的状态(通过服务)和(更罕见)当前 View 。

我想说,服务是模型的“C 部分”。另外,我倾向于更喜欢名称“域对象”而不是“域模型”或“模型对象”,因为它会导致额外的困惑。

并且域对象不访问数据映射器。域对象本身应该完全不知道它们是否被存储。该部分由服务处理。您可以在 this answer 中找到代码/api 示例.

关于php - 这些 MVC 层正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489825/

相关文章:

zend-framework - Zend_Navigation 渲染子菜单部分

c++ - 编辑器处于事件状态时呈现的 Qt 委托(delegate)显示文本

ruby-on-rails - 如何从主页设置时间戳?

model-view-controller - 如何使用属性路由使 ASP.NET MVC 5 区域显示为站点根目录

php - 在php中用单引号替换json字符串中的双引号

php - 根据用户选择编辑多项选择

php - 在 PayPal 中使用 php 集成 DoDirect API

PHP Zend Youtube API 上传 - 此操作错误需要开发人员 key

php - Doctrine setParameter 和无效参数号

php - 如何在 Zend_Form 中使用来自 Zend_Db_Table 的数据