MVC の利点として引用されている関心の分離は、実際には 3 層/3 層システムの進歩でもあります。ここでも、ビジネス ロジックは独立しており、さまざまなプレゼンテーション層から使用できます。
主な違いは、従来の MVC ではモデルがビューへの参照を持つことができることです。これは、データが更新されると、モデルがこのデータを複数のビューにプッシュバックできることを意味します。代表的な例は、データが複数の方法で視覚化されるデスクトップ アプリケーションです。これは、表とグラフのように単純な場合があります。テーブルの変更 (一方のビューでの変更) は、最初にコントローラーを介してモデルにプッシュされ、次にモデルがそれをグラフ (もう一方のビュー) にプッシュします。その後、グラフはそれ自体を更新します。
デスクトップ開発が衰退しているため、多くのプログラマーは、Java EE の JSF など、いくつかの Web バリアントでのみ MVC に触れています。
そのような場合、モデルがビューへの参照を持つことはほとんどありません。これは、Web が主に要求/応答ベースであり、要求が処理された後、サーバーが追加情報を送信できないためです。つまり、モデルからクライアントにプッシュされた更新は無意味です。リバース ajax/comet ではこれが変わりつつありますが、多くの Web ベースの MVC フレームワークはまだこれを十分に活用していません。
したがって、Web ベースの MVC の場合、M、V、および C の間の典型的な「三角形」は少なくなり、その MVC バリアントは実際には「真の」MVC よりも n 層モデルに近くなります。
また、一部の Web MVC フレームワークには、バッキング Bean (Java/JSF) またはコード ビハインド (ASP.NET) と呼ばれる M、V、および C 間の中間配管部分があることにも注意してください。JSF では、コントローラーはフレームワークによって提供され、ビューは多くの場合、モデルに直接バインドせず、このバッキング Bean を仲介として使用します。バッキング Bean は非常にスリムで、基本的にモデルからデータを一方向にプリフェッチし、モデル固有のメッセージ (例: 例外) をビュー固有のメッセージ (例: 人間が読めるテキスト) に変換するだけです。