2

WPFのMVVMデザインパターンでのModel、View、およびViewModelオブジェクトの基本的な定義は何ですか?彼らの責任は何ですか、彼らのそれぞれは何をすべきで、何をすべきではありませんか?

4

1 に答える 1

8

モデル:

  1. データを表します。
  2. エンティティ。
  3. モデルクラスは、アプリケーションのデータとビジネスロジックをカプセル化する非ビジュアルクラスです。
  4. 彼らは、アプリケーションのデータを管理し、必要なビジネスルールとデータ検証ロジックをカプセル化することによってその一貫性と有効性を確保する責任があります。
  5. モデルクラスは、ビューまたはビューモデルクラスを直接参照せず、それらの実装方法に依存しません
  6. モデルクラスは通常、およびインターフェイスを介してプロパティおよびコレクションの変更通知イベントを提供します。INotifyPropertyChangedINotifyCollectionChanged
  7. これにより、ビューでデータを簡単にバインドできます。
  8. オブジェクトのコレクションを表すモデルクラスは、通常、クラスから派生しますObservableCollection<T>
  9. IDataErrorInfoモデルクラスは通常、またはINotifyDataErrorInfoインターフェイスを介してデータ検証とエラーレポートを提供します。
  10. モデルクラスは通常、データアクセスとキャッシングをカプセル化するサービスまたはリポジトリと組み合わせて使用​​されます。
  11. データをどこから取得するか、つまりWCFサービスから取得するかを知る必要はありません。WCFRIAサービスなど。
  12. 検証が含まれる場合があります。

意見:

  1. ビューは、ウィンドウ、ページ、ユーザーコントロール、データテンプレートなどの視覚的な要素です。
  2. ビューは、ビューに含まれるコントロールとそのルックアンドフィール、視覚的なレイアウトおよびスタイルを定義します。
  3. ビューは、DataContextプロパティを介してビューモデルを参照します。
  4. ビュー内のコントロールは、 ViewModelによって公開されるプロパティとコマンドにバインドされたデータです。
  5. ビューは、ビューとビューモデル間のデータバインディング動作をカスタマイズできます。たとえば、ビューは値コンバーターを使用してUIに表示されるデータをフォーマットしたり、検証ルールを使用してユーザーに追加の入力データ検証を提供したりできます。
  6. ビューは、ビューモデルの状態変化から、またはユーザーのUIとの対話を介してトリガーされる可能性のあるアニメーションや遷移など、UIの視覚的動作を定義および処理します。
  7. ビューの分離コードは、XAMLで表現するのが難しい、またはビューで定義された特定のUIコントロールへの直接参照を必要とする視覚的な動作を実装するためのUIロジックを定義する場合があります。

ViewModel:

  1. ViewModelは非ビジュアルクラスであり、WPFまたはSilverlight基本クラスから派生したものではありません。
  2. これは、アプリケーションでユースケースまたはユーザータスクをサポートするために必要なプレゼンテーションロジックをカプセル化します。
  3. ViewModelは、ビューとモデルに関係なくテスト可能です。
  4. ViewModelは通常、ビューを直接参照しません。ビューにバインドされたUIフレンドリーエンティティ、UI状態、アクション、およびパブリックプロパティがあります。
  5. ビューがデータバインドできるプロパティとコマンドを実装します
  6. およびインターフェイスを介した変更通知イベントを介して、状態の変更をビューに通知します。INotifyPropertyChangedINotifyCollectionChanged
  7. さまざまなコマンドを使用してViewと対話します。
  8. ビューモデルは、ビューとモデルの相互作用を調整します
  9. データを変換または操作して、ビューで簡単に使用できるようにしたり、モデルに存在しない可能性のある追加のプロパティを実装したりする場合があります。
  10. IDataErrorInfoまた、またはINotifyDataErrorInfoインターフェイスを介してデータ検証を実装する場合もあります。
  11. ビューモデルは、ビューがユーザーに視覚的に表すことができる論理状態を定義する場合があります。
  12. サービスを呼び出して、MVVMトライアドの外部と通信します。

ソース:http ://code.msdn.microsoft.com/Design-Patterns-MVVM-Model-d4b512f0

于 2012-10-31T10:40:20.470 に答える