[解決済み] MVCとMVVMの違いは何ですか?[クローズド]
質問
標準の "Model View Controller" パターンと Microsoft の Model/View/ViewModel パターンの間に違いはありますか?
どのように解決するのですか?
MVC/MVVMは どちらか一方 を選択します。
この2つのパターンは、ASP.NetとSilverlight/WPFの両方の開発で、異なる方法で登場します。
ASP.Netの場合、MVVMは次のような用途に使われます。 双方向バインド ビュー内のデータ。これは通常、クライアントサイドの実装です(例:Knockout.jsを使用)。一方、MVCは、懸念事項を分離する方法です。 サーバーサイドで .
SilverlightやWPFの場合、MVVMパターンはより包括的で、以下のようなことが可能です。
現れる
は、MVC(またはソフトウェアを個別の責任に組織化する他のパターン)の代わりとして機能します。このパターンからよく出てくる前提の1つが
ViewModel
のコントローラを単純に置き換えたものです。
MVC
(を代用すればいいかのように)。
VM
に対して
C
の頭文字を取れば、すべてが許される)...。
ViewModelが行うのは ない は、必ずしも個別のコントローラの必要性を置き換えるものではありません。
問題は、独立してテスト可能*であり、特に必要なときに再利用可能であるために、ビューモデルはどのビューがそれを表示しているのか分からないこと、そしてより重要なのは、そのビューがどのように表示されているのか分からないことです。 データがどこから来ているのかわからない .
*注:実際には、コントローラは、ユニットテストを必要とするロジックのほとんどを、ViewModelから取り除きます。そして、VM は、ほとんどテストを必要としない、ダムコンテナになります。これは、VMがデザイナーとコーダーの間の橋渡しであり、シンプルであるべきであるため、良いことなのです。
MVVMの場合でも、一般的にコントローラはすべての処理ロジックを含み、どのビューモデルを使用してどのビューにどのデータを表示するかを決定します。
これまで見てきたように、ViewModel パターンの主な利点は XAML のコードビハインドからコードを削除することです。 XAML編集をより独立したタスクにするために . それでも、必要に応じてコントローラーを作成し、アプリケーションの全体的なロジックを制御します(シャレではありません)。
私たちが守っているMVCVMの基本的なガイドラインは、以下の通りです。
- 表示 ある形のデータを表示する . データがどこから来るのか、まったくわからないのです。
- ビューモデル ある形のデータやコマンドを保持する しかし、データまたはコードがどこから来るのか、どのように表示されるのかは知らない。
- モデル 実際のデータを保持する (様々なコンテキスト、ストア、その他のメソッド)
- コントローラは、イベントをリッスンし、パブリッシュする。コントローラは、どのデータがどこで見られるかを制御するロジックを提供します。コントローラは ViewModel にコマンドコードを提供し、ViewModel が実際に再利用可能になるようにします。
また、我々は Sculpture コードジェネレーションフレームワーク MVVMとPrismに似たパターンを実装し、さらにコントローラを多用してすべてのユースケースロジックを分離しています。
コントローラがビューモデルに取って代わられるとは思わないでください。
このトピックについてブログを始めましたので、随時追加していきます。 . ほとんどのナビゲーションシステムはViewsとVMを使用するだけなので、MVCVMを一般的なナビゲーションシステムと組み合わせることには問題がありますが、それについては後日説明します。
MVCVMモデルを使用するもう一つの利点は、以下の通りです。 アプリケーションの実行中、コントローラオブジェクトだけがメモリ上に存在する必要があります。 また、コントローラには主にコードとわずかなステートデータが含まれます(つまり、メモリのオーバーヘッドはごくわずかです)。これは、ビューモデルを保持しなければならないソリューションよりも、はるかにメモリ負荷の低いアプリになり、ある種のモバイル開発(Silverlight/Prism/MEFを使用したWindows Mobileなど)には理想的な方法です。もちろん、アプリケーションの種類にもよりますが、レスポンスのためにキャッシュされたVMを保持する必要がある場合もあります。
注:この投稿は何度も編集され、特に質問された狭い範囲を対象としていなかったので、最初の部分を更新し、現在その部分もカバーしています。以下のコメントでは、多くの議論がASP.Netにのみ関係し、より広い視野に立ったものではありません。この投稿は、Silverlight、WPF、ASP.NetにおけるMVVMの幅広い使い方をカバーし、コントローラをViewModelsに置き換えることを阻止しようとするものでした。
関連
-
[解決済み] SOFEAとは?
-
[解決済み] MVC :: モデルとは何ですか?
-
[解決済み] MVPとMVC、その違いは何ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] MVCとMVVMの違いは何ですか?[クローズド]
-
[解決済み] Abstract FactoryとFactoryのデザインパターンの違いは何ですか?
-
[解決済み] AndroidにおけるMVCパターン
-
[解決済み】DTO(Data Transfer Object)とは何ですか?)
-
[解決済み] オブザーバー、Pub/Sub、データバインディングの違いについて
-
[解決済み] MVCとN層アーキテクチャの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン