MVCとMVVMの違いは何ですか?質問する

MVCとMVVMの違いは何ですか?質問する

標準の「モデル ビュー コントローラー」パターンと Microsoft のモデル/ビュー/ビューモデル パターンには違いがありますか?

ベストアンサー1

MVC/MVVM はどちらか一方を選択するものではありません。

これら 2 つのパターンは、ASP.Net と Silverlight/WPF 開発の両方で、異なる方法で出現します。

ASP.Net では、ビュー内で双方向にデータをバインドするために MVVM が使用されます。これは通常、クライアント側の実装です (例: Knockout.js を使用)。一方、MVC はサーバー側で懸念事項を分離する方法です。

Silverlight と WPF の場合、MVVM パターンはより包括的であり、MVC (またはソフトウェアを別々の役割に編成するその他のパタ​​ーン) の代わりとして機能するように見えViewModelます。このパターンから頻繁に生じる 1 つの仮定は、コントローラーを に単純に置き換えた(頭字語でMVC置き換えればすべてが許されるかのように) というものでした...VMC

ViewModel は必ずしも個別のコントローラーの必要性を置き換えるものではありません。

問題は、独立してテスト可能* であり、特に必要なときに再利用可能であるために、ビュー モデルはどのビューがそれを表示するのかを把握していないだけでなく、さらに重要なことに、そのデータがどこから来ているのかも把握していないことです

*注: 実際には、コントローラーは ViewModel からユニット テストを必要とするロジックのほとんどを削除します。すると、VM はテストがほとんど (またはまったく) 必要ないダム コンテナーになります。VM はデザイナーとコーダーの間の単なる橋渡しであり、シンプルに保つ必要があるため、これは良いことです。

MVVM の場合でも、コントローラーには通常、すべての処理ロジックが含まれ、どのビュー モデルを使用してどのビューにどのデータを表示するかを決定します。

これまで見てきたように、ViewModel パターンの主な利点は、XAML コード ビハインドからコードを削除して、XAML 編集をより独立したタスクにすることです。アプリケーションの全体的なロジックを制御するために、必要に応じてコントローラーを作成します (しゃれではありません)。

私たちが従う基本的な MVCVM ガイドラインは次のとおりです。

  • ビューには特定の形式のデータが表示されます。データがどこから来ているのかはわかりません。
  • ViewModel は特定の形式のデータとコマンドを保持しますが、データまたはコードがどこから来るのか、どのように表示されるのかは認識しません。
  • モデルは実際のデータ(さまざまなコンテキスト、ストア、またはその他の方法)を保持します
  • コントローラーはイベントをリッスンし、公開します。コントローラーは、表示されるデータとその場所を制御するロジックを提供します。コントローラーは、ViewModel が実際に再利用できるように、ViewModel にコマンド コードを提供します。

また、彫刻コード生成フレームワークMVVM と Prism に似たパターンを実装し、さらにコントローラーを広範に使用してすべてのユースケース ロジックを分離します。

コントローラーがビューモデルによって廃止されると想定しないでください。

私はこのトピックに関するブログを始めました。できるときに追加していきます(ホスティングが失われたため、アーカイブのみ)ほとんどのナビゲーション システムはビューと VM のみを使用するため、MVCVM を一般的なナビゲーション システムと組み合わせる場合には問題がありますが、これについては後の記事で説明します。

MVCVM モデルを使用するもう 1 つの利点は、アプリケーションの存続期間中はコントローラ オブジェクトのみがメモリ内に存在する必要があり、コントローラには主にコードとわずかな状態データ (つまり、わずかなメモリ オーバーヘッド) が含まれることです。これにより、ビュー モデルを保持する必要があるソリューションよりもメモリを大量に消費するアプリが大幅に少なくなり、特定の種類のモバイル開発 (Silverlight/Prism/MEF を使用する Windows Mobile など) に最適です。もちろん、応答性のためにキャッシュされた VM を時々保持する必要があるため、これはアプリケーションの種類によって異なります。

注: この投稿は何度も編集されており、特に質問の対象となるものではなかったため、最初の部分を更新してその部分もカバーするようにしました。以下のコメントでの議論の多くは、ASP.Net にのみ関連しており、より広い範囲には関係していません。この投稿は、Silverlight、WPF、ASP.Net での MVVM のより広い使用法をカバーし、コントローラーを ViewModel に置き換えることを思いとどまらせることを目的としています。

おすすめ記事