被引用为 MVC 优势的关注点分离实际上也是 3-layer/3-tier 系统的进步。在那里,业务逻辑也是独立的,可以从不同的表示层使用。
一个主要区别是,在经典 MVC 中,模型可以有对视图的引用。这意味着当数据更新时,模型可以将此数据推送回可能的多个视图。最好的例子是一个桌面应用程序,其中数据以多种方式可视化。这可以像表格和图表一样简单。表中的更改(这是一个视图中的更改)首先通过控制器推送到模型,然后将其推送回图形(另一个视图)。然后图表会自行更新。
由于桌面开发正在走下坡路,许多程序员只接触到一些 Web 变体中的 MVC,例如通过 Java EE 中的 JSF。
在这些情况下,模型几乎从不引用视图。这是因为 Web 主要是基于请求/响应的,并且在服务请求后,服务器无法发送附加信息。即从模型推送到客户端的更新将毫无意义。使用反向 ajax/comet,这种情况正在发生变化,但是许多基于 Web 的 MVC 框架仍然没有充分利用这一点。
因此,在基于 Web 的 MVC 的情况下,M、V 和 C 之间的典型“三角形”较少,并且 MVC 变体实际上比“真正的”MVC 更接近 n 层模型。
另请注意,一些 Web MVC 框架在 M、V 和 C 之间有一个中间管道部分,称为支持 bean (Java/JSF) 或代码背后 (ASP.NET)。在 JSF 中,控制器由框架提供,视图通常不直接绑定到模型,而是使用此支持 bean 作为中介。支持 bean 非常苗条,基本上只是以一种方式从模型中预取数据,并将模型特定消息(例如异常)转换为视图特定消息(例如一些人类可读的文本)。