这真的是MVC设计模式还是应该称之为其他?

时间:2017-02-07 00:59:33

标签: php model-view-controller router

这是一个关于理论的问题,所以不需要代码片段。

我构建了一个路由器,就像典型的路由器一样,根据URL调度控制器。工作流程如下:

  1. 路由器调度控制器并实例化它
  2. Controller渲染视图
  3. 用户与视图互动
  4. 控制器根据用户交互更新模型
  5. 模型将数据的新状态返回给控制器
  6. Controller根据新数据更新视图
  7. 基本上,控制器是模型和视图之间的起点和链接。模型和视图永远不会直接相互影响。控制器是主力,并且拥有大部分代码。

    现在,这一切都很好,我明白了。当我阅读有关MVC设计模式的文章并意识到他们描述的内容不是我刚才描述的内容时,就会产生混淆。看起来,在你从视图开始的模式中。视图直接与模型对话,控制器接受用户交互以更新模型。

    所以,我正在做的可能涉及模型,视图和控制器,但它不是严格意义上的MVC设计模式。我读过一篇文章,他们称之为我最初描述为CAV,控制器动作视图。

    我的问题是,我描述的是什么?如果它实际上不是MVC,我不想继续将它称为MVC。从我读到的真实MVC诞生于70年代。事情发生了变化。也许我正在做的是MVC的一些进化版本,但不是严格形式的MVC。是否有其他名称,所以我可以通过称之为MVC来阻止自己和其他人的混淆?

2 个答案:

答案 0 :(得分:0)

我认为它的语言(技术)依赖。 您使用 php 标记标记了您的问题,因此我认为您正在使用此语言开发应用程序。在经典的PHP应用程序中,视图无法从模型中获取更新(事实上,这与仅在服务器上执行的PHP语言更相关)。

首先,为每个请求启动整个应用程序,并在发送完所有响应后终止。因此,每个请求都会调用路由器。

然后,路由器执行必须处理请求的控制器(根据路由规则)。

用于读取或写入的请求不会修改此行为。

如果您想允许视图向控制器请求数据修改,您可能需要使用一些客户端编程语言(Javascript)。因此,您可以使用 REST API 来处理模型和视图之间的通信。

要回答您的问题,我认为您无法在客户端 - 服务器模型上实现 MVC设计模式,而无需在客户端上使用编程语言

答案 1 :(得分:0)

即使我之前遇到过这种混乱。在原始形式中,View确实与控制器交互。他们遵循观察者可观察的模式。这就是MVC在SmallTalk中的构思方式。但是,您所讨论的MVC版本实际上是它的现代版本,并且在大多数框架中使用。它已经成为一种标准。我不知道任何其他术语。在这个版本中,控制器实际上是视图和模型之间的桥梁。然而,这两种模式都达到了关注点分离的理想目标。