MVCのコントローラーとMVVMのViewModelの違いは何ですか?


21

MVCとMVVMの違いがはっきりとわかりません。ViewModelのCommandは、ControllerのActionメソッドに似ていると思います。また、コントローラーとViewModelの両方が、データバインディングを介してモデルの状態を変更した後、それ自体を更新するようにビューに通知します。2つのパターンの主な違いは何ですか?

回答:


25

コントローラーとViewModelはさまざまな点で異なります。

MVCでは、コントローラーはビューを認識しており、ビューを変更できます。また、モデルを認識し、呼び出すことができます。MVVMでは、ViewModelはViewの抽象表現であり、具体的なUIを認識しません。必要に応じて表示できるようにModelをラップします。

従来のMVCでは、コントローラーはモデルと対話するためのビューの戦略にすぎません。実際、コントローラーが不要な場合もあります。MVVMでは、異なる動作が必要な場合は同じビューに対して異なるViewModelを使用できるため、必要ありません。MVCでは、たとえばモデルと通信するためのReadOnlyControllerまたはAdminControllerを使用できます。MVVMでは、2つのViewModelを作成し、Viewに必要なものを選択できます。

しかし、それらにはいくつかの類似点があります。両方のパターンで、ビューはオブザーバーです。古典的なMVCでは、ビューはモデルのオブザーバーであり、MVVMではビューモデルのオブザーバーです。

両方のパターンは、懸念を分離することを目的としています。MVVMは主に、使用中のUIテクノロジーに完全に依存しないビューの抽象化を提供することを目的としています。MVCはそこまで行きません。関心の分離に主眼を置いているので、ビジネスロジック(モデル)をビューに入れません。

同様の質問に対する私の私の答えも役立つかもしれません。

最後に、両方のパターンが同じファミリーに属していると言えます。MVVMが子孫であるMVPは、MVCの兄弟です。詳細を知りたい場合は、Martin FowlerのWebサイトへのこのリンクに従ってください


これらのモデルビューアーキテクチャは、それらを実装する人々によって最もよく理解されているとは思わないか。開発者の選択の問題だと思います。MVの場合、少しオーバーヘッドのあるビューについて完全に抽象化するかどうかに応じて、MVCまたはMVVMを選択します。
Pankaj Upadhyay

@Pankaj Upadhyay:どちらを使用すべきかは、要件とテクノロジーの選択、プラットフォームの特異性によって異なります。
ファルコン

MVCアーキテクチャは何にでも十分であると思いますが、MVVMを特に必要とする問題に直面していないためかもしれません。それは絶対に緩んで、将来のアップグレードでより多くのエラーを強化する作るためIMO、あなたは確かにビューをある程度制御を持っている必要があります
パンカジUpadhyay

1
@Pankaj Upadhyay:さまざまなUIテクノロジーに同じロジックを使用する場合は、MVPが優れています。私はあなたが必ずしもビューをいくらか制御する必要があるとは思わない。それは完全に独立している可能性があり、ViewModelを同様にテストできます。プロジェクトの作業をより適切に分割できるため、より良い分離は設計者にも利益をもたらします。
ファルコン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.