web-dev-qa-db-ja.com

MVVMにおけるモデルの役割

MVVMパターンでの(データ)モデルの役割に関する記事をいくつか読みました。しかし、私はまだモデルに何が入るのか理解できませんでした。

モデルはINotifyPropertyChangedを実装する必要がありますか?もしそうなら、VMとモデルの違いは何ですか?

そうでない場合、モデルの変更はVMとそれが発生したことをビューに通知しません。したがって、ロジックがモデルに組み込まれることを考えると、いくつかについてViewModelに通知する必要があることは明らかです。ただし、両方のクラスにINotifyPropertyChangedを実装するのは奇妙ではありませんか?

どうもありがとうございました!

38
Horse Pen

あなたのコメントの1つから:

モデルがINotifyPropertyChangedを実装しているのは奇妙に思えます。これは、UI関連のクラスとして私には思えます。

変更通知は、UIコンテキストだけでなく、あらゆる種類のコンテキストで使用されます。たとえば、特定の変更をTextWriterに記録する診断コードを添付することができます。これは、オブジェクトが変更通知を実装している場合、基になるモデルオブジェクトを変更せずに簡単に実行できます。

ただし、UIの更新にのみ使用されているアプリケーションでも、このパターンは理にかなっています。変更通知はイベントを介して処理されるため、イベントを発生させるオブジェクトは、イベントを処理するオブジェクトから切り離されます。モデルは、どの種類のUIがモデルを使用しているかを認識しておらず、知る必要もありません。 「UIがあると仮定すると、それが何であれ、このプロパティの値が変更されたことを伝える必要があります」と言っているだけです。

では、なぜビューモデルがあるのでしょうか。モデルに直接バインドしないのはなぜですか?実際、変更通知を実装している場合は、モデルに直接バインドするだけですcan。多くの単純なWPFアプリケーションでは、個別のビューモデルを用意する必要はありません。モデルに変更通知を実装して、それを1日と呼ぶことができます。 UIを基盤となるビジネスロジックから切り離す必要があり、ビューモデルの必要性が生じるのは、単一責任の原則に違反しているかどうかについて懸念し始めたときです。

8
Robert Rossney

モデルはビジネスロジックを実装します。ビューモデルdecoratesビュー(Web、WinForm、CLIなどの何らかの形式のUI)で表示し、操作するためのビジネスロジック。したがって、コアビジネスロジックの一部として実装しない限り、モデルにINotifyPropertyChangedを実装する必要があるとは言いません。

20

場合によっては、モデルはINotifyPropertyChangedを実装する必要があります。あなたがICQまたはそのようなもののためにクライアントをコーディングしていると想像してください。 ViewModelは、誰かがあなたにメッセージを送信したことをどのように知っているはずですか?

モデルとViewModelの違い:

ViewModelは、モデルからの出力のみを単純化します。モデルが非常に単純な場合、ViewModelは必要ありません。

5
bidacek