web-dev-qa-db-ja.com

コーディングに関して、MVC、MVP、MVVMのデザインパターンの違いは何ですか。

「MVC、MVP、およびMVVMのデザインパターンの違いは何ですか」というフレーズを使用してGoogleを検索すると、 MVC、MVP、およびMVVMのデザインパターンの違いは理論的には似ている

MVP

データコンテキストによるバインドが不可能な状況で使用してください。 Windowsフォームはその好例です。モデルからビューを切り離すためにはプレゼンターが必要です。ビューはプレゼンターに直接バインドできないため、情報はインターフェイス(IView)を介してビューに渡される必要があります。

MVVM

データコンテキストを介したバインディングが可能な状況で使用してください。どうして?各ビューのさまざまなIViewインタフェースが削除されたため、保守するコードが少なくなります。 MVVMが可能ないくつかの例には、Knockoutを使用したWPFおよびJavaScriptプロジェクトが含まれます。

MVC

ビューとプログラムの他の部分との間の接続が常に利用可能であるとは限らない状況で使用します(そしてMVVMやMVPを効果的に使用することはできません)。これは、Web APIがクライアントのブラウザに送信されたデータから分離されている状況を明確に説明しています。 MicrosoftのASP.NET MVCは、このような状況を管理するための優れたツールであり、非常に明確なMVCフレームワークを提供します。


しかし、違いを理論的にサンプルコードと一緒に説明する単一の記事は見つかりませんでした。

これら3つのデザインパターン(MVC、MVP、MVVM)の違いをコードと一緒に説明した記事があれば、本当にうれしいです。

これら3つのデザインパターン(MVC、MVP、およびMVP)で実装されている3つの類似CRUDアプリのソースコードを手に入れたいです。 MVVM)それで私はコードを調べて、これら3つのデザインパターン(MVC、MVP、MVVM)のためにどのようにコードを書くべきか理解することができるように。

そのため、これら3つのデザインパターン(MVC、MVP、MVVM)でコードがどのように異なるかについて説明している記事があれば、その記事にリダイレクトしてください。

181
Thomas

This 良いスターターになるはずです。実際には、あなたが選んだ「プラットフォーム」もあなたがこれらのパターンをどのように使うかに大きな役割を果たしています。たとえば、MVVMは当然WPFに適していますが、MVPはWindowsフォームでうまく機能します。 ASP.Net MVCはそれ自身のために話します。

57
David Osborne

いくつかの基本的な違いは手短に書くことができます。

MVC:

伝統的なMVCはそこにあります

  1. モデル:データのモデルとして機能
  2. View:UIになることができるユーザーへのビューを扱います
  3. Controller:ModelとViewの間の対話を制御します。ビューはモデルを更新するためにコントローラを呼び出します。必要に応じて、Viewは複数のコントローラを呼び出すことができます。

MVP:

従来のMVCと似ていますが、ControllerはPresenterに置き換えられています。しかし、プレゼンターは、コントローラーとは異なり、ビューの変更も担当します。ビューは通常プレゼンターを呼び出しません。

MVVM

ここでの違いはView Modelの存在です。これはObserver Design Patternの一種の実装であり、モデルの変更はビューでもVMによって表されます。例:スライダーを変更すると、モデルだけでなく、ビューに表示されているテキストである可能性のあるデータも更新されます。そのため、双方向のデータバインディングがあります。

86
Pritam Banerjee

リンクからの素晴らしい説明: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

まずMVCを見てみましょう

入力はビューではなく、最初にコントローラーに向けられます。その入力はページと対話しているユーザーから来るかもしれませんが、それはまたブラウザに特定のURLを入力することからであるかもしれません。いずれの場合も、いくつかの機能を開始するためにインターフェースされているそのコントローラーです。

コントローラとビューの間には、多対1の関係があります。これは、実行されている操作に基づいて、単一のコントローラが異なるビューをレンダリングするように選択できるためです。

ControllerからViewへの一方向の矢印があります。これは、ビューにコントローラに関する知識や参照がないためです。

コントローラーはモデルを返送するので、ビューとそれに渡される予定のモデルとの間には知識がありますが、それを処理するコントローラーにはありません。

MVP - モデルビュープレゼンター

それでは、MVPパターンを見てみましょう。主な違いを除いて、MVCと非常によく似ています。

入力はプレゼンターではなくビューで始まります。

ビューと関連付けられているプレゼンタの間には1対1のマッピングがあります。

ビューはプレゼンターへの参照を保持します。プレゼンターはまた、ビューからトリガーされたイベントに反応しているので、それに関連付けられているビューを認識しています。

プレゼンタは、モデルに対して実行した要求されたアクションに基づいてビューを更新しますが、ビューはモデルに対応していません。

MVVM - モデルビュービューモデル

MVCとMVPのパターンを目の前にして、MVVMパターンを見て、それがどのような違いを持っ​​ているのかを見てみましょう。

入力はビューモデルではなくビューで始まります。

ビューがビューモデルへの参照を保持している間、ビューモデルにはビューに関する情報がありません。これが、さまざまなビューと1つのビューモデルとの間で1対多のマッピングをテクノロジ間でも可能にする理由です。たとえば、WPFビューとSilverlightビューは同じビューモデルを共有できます。

32
taha027

MVC、MVP、MVVM

MVC(旧)

MVP(結合度が低いため、よりモジュール化されています。プレゼンターはViewとModelの間の仲介者です)

MVVM(VMとUIコンポーネントの間には既に双方向のバインディングがあるため、MVPよりも自動化されています) enter image description here

別の画像: enter image description here

28
Uddhav Gautam

下の画像は、Erwin van der Valkによって書かれた article からのものです。

image explaining MVC, MVP and MVVM - by Erwin Vandervalk

記事 は違いを説明し、C#のコード例をいくつか示します。

1
Jboy Flaga