つまり、MVVM / データ バインディングの概念は、クライアント サーバー Web アプリケーションには当てはまらないということですか?
いいえ、MVVM パターンをクライアント サーバー Web アプリケーションに適用できます。
実際、Asp.Net MVC は実際にこのパターンを使用します。コントローラーがビューを作成するときに、「ビューモデル」を渡すことができます。このビューモデルは、多くの場合、特定のビューが必要とするすべてのデータをモデル (データベース) から取得した POCO データ オブジェクトです。ビューは、このデータを使用して html ページをレンダリングします。
ウィキペディアの MVVM は、Microsoft によって WPF とともに導入されたと述べています。具体的には、ビューはビュー モデルのプロパティにバインドされます。ビューモデルは、これをデータベースにマップします。この定義により、Asp.Net はそれと完全には一致しません。knockout.js や vue.js などのクライアント側フレームワークは、ビューモデル プロパティを使用したこの種の双方向バインディングをサポートしています。
これらのパターンはすべて幻想的な MV* パターンに基づいています。もともとは MVC デザイン パターンと呼ばれていました。では、これは Asp.Net MVC とまったく同じパターンですか? 実際には、そうではありません。コントローラーは、そもそもまったく異なるものを意味します (ウィキペディアの MVC を参照)。元の MVC コントローラーは、ビュー経由ではなく、すべてのユーザー入力を直接処理します。次に、元の MVC パターンはデスクトップ アプリ GUI 用に設計され、Asp.Net MVC はクライアント サーバー Web アプリで使用するためにパターンを適合させました。ASP.Net コントローラーは、クライアント側の html ページがヒットできる http エンドポイントのコレクションです (例: フォーム ポスト、ページ ナビゲーション、ajax)。
そのため、M-something-V パターンが多く、一般的なパターンは MVC デザイン パターンと呼ばれることがよくあります。
もう 1 つ重要な点があります。クライアント側とサーバー側です。豊富なクライアント側 JavaScript フレームワークを導入しましたが、素晴らしい MV* パターンはここでも優れています。したがって、クライアント側の View-Model-ServerHTTPEndPoints とサーバー側の ServerHTTPEndPoints-ServerModel のようなものを持つことができます。サーバー エンドポイントは、使用している Web フレームワークまたはプログラミング言語に関係なく、Asp.Net コントローラーまたは同等のものを指します。サーバー側の観点からは、クライアント側の HTML 全体がビューです。クライアント側のモデルは、サーバーの ajax API (http エンドポイント) と通信して、データを同期したり、高度なアクションをトリガーしたりします。通常、ServerModel はデータベースです。ノックアウト/ビューでは、クライアント側の「モデル」ではなく、ViewModel になります。redux/flux で react/vue を使用する場合、クライアント側は View-ViewModel-Model-ServerHTTPEndPoints になり、モデルは redux/flux ストアになります。また、多くの場合、サーバー側でサービスが導入されます: ServerHTTPEndPoints-Service-Model. このようにして、単体テストは、Web サーバー全体を起動して HTTP 接続を確立するのではなく、サービスを直接ヒットできます。