web-dev-qa-db-ja.com

ASP.NET MVCモデルとViewModel

OK、MSのASP.NET MVCに関する「ViewModels」についての議論を聞いています。

さて、それは特定の種類のモデルになることを意図しています、正しいですか?特定の種類のビューではありません。

私の理解では、それはビューと対話する特定の目的を持つ一種のモデルですか?またはそのような何か?

いくつかの説明をいただければ幸いです。

86
Qcom

基本的に、モデルとビューモデルはどちらも属性を持つ単純なクラスです。

これらのクラスの主な目的は、それぞれコントローラーおよびビューであるそれぞれの対象者のオブジェクトを(「モデル化」するために)記述することです。

だからあなたが言うとき、あなたは完全に正しいです

私の理解では、それはビューと対話する特定の目的を持つ一種のモデルです

したがって、モデルクラスはアプリケーションが対話するドメインエンティティであるのに対し、ビューモデルはビューが対話する単純なクラスです。

それが役に立てば幸い :)

更新

Microsoftは、主にModel-View-Controllerに基づいてMartin fowlerによるプレゼンテーションパターンの特別なバージョンを開発し、PFアプリケーションのModel-View-ViewModel(MVVM)と呼びました。このパターンは、UI開発者が従来の開発者よりもビジネスロジックに基づいて異なる要件を持っている最新のUI開発プラットフォームを対象としています。ちょっと見てください こちら

65
Lorenzo

簡単に言えば、次のことを考えたいと思います。

モデル:厳密に見て、データモデルのように感じます。すべての意図と目的において、それはデータモデルのクラス表現にすぎません。ビューやビュー内の要素に関する知識はありません。ただし、ビューに使用する属性デコレーター(必須、長さなど)を含めることはできません。

ビューモデル:ビューとモデルの間のデータバインダーとして機能し、多くの場合、モデルのラッパーでもあります。ビューなしでは役に立たないため、通常、標準モデルのように複数のビューやコントローラーで再利用することはできません。

例として、モデルにはデータソースを直接表現する次のプロパティがあります。

    public string FirstName { get; set; }
    public string LastName { get; set; }

これで、View ModelはViewに関連付けられているため、次のプロパティを持つことができます-ModelのFirstNameフィールドとLastNameフィールドを1つの文字列として連結します。

    [Display(Name = "Customer Name")]                
    public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}
63
Jason Marsell

この記事は、特にバインディングに関して、「ドメインモデル」と「ビューモデル」がMVCアプリケーション内でどのように相互作用するかを理解するのに非常に役立つリソースであることがわかりました。何よりも、抽象的な説明の代わりに例が含まれています。

」MVCがリリースされて以来、ビューモデルを構築する最適な方法について多くの混乱が見られました。ベストプラクティスの推奨事項さらに、特効薬として機能する「万能」ソリューションはありませんこの投稿では、出現した主なパターンのいくつかとそれぞれの長所/短所について説明します。これらのパターンの多くは、実際の問題を解決する人々から生まれていることに注意することが重要です。」

http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

25
misteraidan

WikiPediaには、SO answer: http://en.wikipedia.org/wiki/Model_View_ViewModel

私は引用する:

モデル:従来のMVCパターンと同様に、モデルは次のいずれかを参照します(a)実際の状態のコンテンツを表すオブジェクトモデル(オブジェクト指向のアプローチ)、または(b)そのコンテンツを表すデータアクセス層(データ中心のアプローチ)。

View:クラシックMVCパターンと同様に、ビューは、ボタン、ウィンドウ、グラフィックス、その他のコントロールなど、GUIによって表示されるすべての要素を参照します。

ViewModel:ViewModelは「ビューのモデル」です。つまり、ビューの抽象化であり、ビューとモデルの間のデータバインディングでも機能します。 。これは、モデル情報をビュー情報に変更し、ビューからモデルにコマンドを渡すデータバインダー/コンバーターとして機能するコントローラー(MVCパターン)の特殊な側面として見ることができます。 ViewModelは、パブリックプロパティ、コマンド、および抽象化を公開します。 ViewModelは、モデル内のデータの実際の状態ではなく、データの概念的な状態に例えられています。

19
Ian Mercer

ViewModelの概念がありますが、通常はAsp.net MVCに関連付けられていません。 MVCは、モデルビューコントローラーパターンを使用します。このパターンでは、コントローラーが相互作用を処理し、モデルからデータを作成し、そのデータをビューに渡して表示します。

ViewModels(およびModel View ViewModelパターン)は、より一般的にSilverlightとWPFに関連付けられています。 Xamlは、ビューがViewModelへの双方向バインディングを実行できるという点で少し異なります。そのため、テクノロジーは少し異なります。たとえば、テキストボックスをフィールドにバインドすると、そのテキストボックスに入力するときに、フィールドの値が動的に更新されます。 Webページはステートレスであるため、Webページではこの種の相互作用は実際には不可能です。

2つのパターンの類似点は、どちらもロジックをディスプレイから分離しようとしていることです。これの最も一般的な使用/理由はテストです。ユーザーがユーザーインターフェイスを介して呼び出すすべての対話を(テストフレームワークを介して)コードから実行できるようにする必要があります。

5
tsimon