经典 MVC 中的信息流。
MVC 中的数据不应该从模型通过控制器传递到视图。那是违反原始概念的。
如果您阅读 MVC 设计模式的原始定义,您会注意到视图旨在从模型请求数据。视图知道什么时候做,因为他们正在观察模型的变化。
现代诠释。
在最初的概念中,您应该为应用程序中的每个元素设置小的 MVC 三元组。在现代解释中(根据Martin Fowler),模型不再是任何单个对象或类。模型是一个层,其中包含几组对象。每个人都有不同的职责。
此外,随着 Web 的兴起,还有另一个问题。您不能将经典 MVC 用于网站。从理论上讲,现在您可以通过保持打开的套接字并在每次更改模型层中的某些内容时向浏览器推送通知来实现它。
但实际上,即使是拥有 100 个并发用户的站点也会开始出现问题。而且你不会使用 MVC 来制作一个博客。使用这种方法即使是较小的社交网络也是不可能的。
这不是与原始概念的唯一分歧。
受 MVC 启发的模式
目前,连同经典的 MVC(甚至不再那么经典了)。受 MVC 启发的模式主要有以下三种:
模型2 MVC
这基本上是相同的经典 MVC 模式,但模型之后和视图之间没有观察者关系。这种模式对我来说更面向网络。每次收到用户请求时,您都知道模型层会发生一些变化。因此,每个用户请求都会导致视图实例向模型层请求信息。
MVP
这种模式,而是用演示者替换控制器。演示者从模型层请求数据并将其传递给当前视图。您可以在此处找到模式定义。它实际上要复杂得多,老实说,我并不完全理解它。
在这种情况下,视图是被动的,不会从模型层请求任何数据。
MVVM
这种模式更接近 MVP hen 和经典 MVC。在这种情况下,类似控制器的结构(实际上将是一个整体类)从模型层请求数据,然后以(被动)视图所期望的方式对其进行更改。
这种模式主要针对开发人员没有完全控制视图或/和模型层的情况。例如,当您开发模型层为 SAP 的应用程序时。或者当您必须使用现有的前端基础架构时。
仅供参考:在 ASP.NET MVC 中所谓的“MVVM”实际上是一个很好的 Model2 实现。他们所谓的“视图模型”实际上是视图实例,而“视图”只是视图使用的模板。