我正在使用 Zend Framework 的完整 MVC 功能编写一个 Web 应用程序,包括服务层、域模型和映射器。我认为我对各层的理解是正确的,但想确认一下。
上层依赖于下层,因此从顶部开始:
Controller - 最顶层。高度依赖于它实例化、填充和渲染的 View 。依赖于服务来访问模型。
View - 不知道 Controller 。有时取决于服务或模型,例如填充选择控件的查找列表。
服务 - 向客户端(例如 Controller )提供 API。高度依赖模型。事实上,服务通常在模型的映射器部分和域部分之间进行协调,以便为客户端完成工作。
映射器(模型,A 部分) - 对域有深入的了解,可以操作域对象以适应关系数据存储,并操作关系数据来创建新的域对象。
域模型(模型,B 部分)- 包含域逻辑。域对象不知道其他层,但是由于它们需要访问其他域对象,因此它们可以将映射器作为“对象查找器”访问。
这听起来对吗?我错过了什么?
最佳答案
嗯。在一些细节上有点错误。
MVC 中有两个主要层:
- 模型层:处理所有领域业务逻辑、规则和信息
- 表示层:处理界面和交互性
Controller 不是“最顶层”。它们是表示层的一部分,其职责是处理用户的请求并传递提取的信息以更改模型层的状态(通过服务)和(更罕见)当前 View 。
我想说,服务是模型的“C 部分”。另外,我倾向于更喜欢名称“域对象”而不是“域模型”或“模型对象”,因为它会导致额外的困惑。
并且域对象不访问数据映射器。域对象本身应该完全不知道它们是否被存储。该部分由服务处理。您可以在 this answer 中找到代码/api 示例.
关于php - 这些 MVC 层正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489825/