2011-01-12 3 views
2

MVVMデザインパターンを使用してSilverlightアプリケーションを作成しようとしています。それは銀行のアプリケーションの一種です。MVVMデザインに関する質問

私はMVVMに関する多くのチュートリアルを見ましたが、何かが私を本当に混乱させます。

"TransactionsView"、 "AccountView"など、ユーザーのパスワード、ユーザー名、UserAccountsのリスト、 "UserAccounts" - 名前、残高、およびAccountTransactionsのリスト、 "AccountTransactions" - 名前とammountを含んでいます。

私のuserprofileを含むmodelviewを1つ作成する必要がありますか、または私が持っているビューごとにviewmodelを作成する必要がありますか?私はこれまでにやっているの?それとも、私はそれが間違ってcompletleyを持っている?

ありがとうございました

+0

便利なヒント:a)ビューモデルはビューのサーバントです。ビューのニーズに基づいて作成します。 b)モデルは非常にゆるやかに定義されていますが、これはほとんどの場合、データを読み込み/保存するためにビューモデルによって使用されるもの、およびビジネスロジッククラスです。 c)ビューモデルは、ビジネスロジック(例えば、検証規則)を含むこともできる。 d)モデルを軽量に保ち、それをやり直してはいけません。ビューとビューモデルは重要な部分です。 e)データバインディングとICommandを使用してビューとビューモデルを結合する。ビューからビューモデルへの直接的なメソッド呼び出しを最小限に抑えます。 – Sander

答えて

2

MVVMでは、ViewModelsは通常、Viewsに1対1です。しかし、ViewModelとModelsの間にはパリティはありません。

  • ビュー:UI
  • のViewModel:もし/ときに、適切なモデルに転送、状態を表示するための変更を処理します。基になるプログラムからの通知をユーザーに返します。また、UIの初期検証も行います。
  • モデル:アプリケーションの実際の "勇気"。アルゴリズム、データストレージ、システムコールなどがここにあります。私はプログラムの流れをここに入れます。私は他の人がViewModelにそれを置くのを見ました。その部分はあなたが理解するまでです。

ビューは常にViewModelを必要とするため、1対1(サブモデルを持つこともできますが、それを決めるために残しておきます。 〜1)。

ViewModelには実際には「仕事をする」ためのモデルが必要ですが、解決しようとしている各アプリケーション/問題までいくつのクラス/インスタンスが必要ですか。

+0

2つの異なるビューに同じViewModelを使用できますか?また、他のビューモデルのパブリックプロパティを保持するグローバルな "MainViewModel"を用意して、どこからでもアクセスできるようにする必要がありますか? – Richard

+1

@リチャード:あなたが望むことは何でもできる、それはあなたのアプリです:)それはあなたのUIとあなたのプログラムの間の大使としてViewModelを考えています。プログラムをプログラムの観点から考えさせ、UIをUIの観点から考えさせ、ViewModelを翻訳させます。 UI状態/ UIコマンドを直接処理すること、UI入力の検証を行うこと、プログラム状態をUIに戻すことから離れすぎると、おそらくViewModelの国からモデルタウンに向かうでしょう。アプリのデザインの一部を見ることなく、私はもっと具体的な助言をすることはできません。 –

+0

@リチャード:しかし、MVVMはあいまいです。あなたは1対1を持つ必要はありません。それは始めるだけの良い場所です。私は個人的には、ViewModelをもっと「ダム」にして、プログラムの流れをモデルの一部で指示させることを好みます。他の人は、プログラムの流れをViewModelの手に置きます。これは、あなたがしたいと思うようなものです。プログラミングが簡単で、理解しやすく(できるだけコメントを置いていない)、デバッグ/テスト/確認が容易で、バグがなく、保守が容易であれば、あなたはあなたがいることを知っている正しい道。 –

0

あなたが正しい方向に向かっていることを説明します。あなたが作成するviewmodelはあなた次第ですが、MVVMは石で設定されていません - その単なる方法です。私が試行錯誤して見つけたことは、あまりにも深く掘り下げる前にそれをよく理解することは賢明だったということでした。

私が理解できる方法でMVVMを説明しなかった多くの記事を読みました。最後に、私はJeremiah Morrillの2つの記事を見つけましたが、それは直感的で理解しやすいものでした:Article 1article 2

+0

興味深い記事。私は彼らが良い方法でMVVMを提示することに同意します。 – Sander

0

MVVMでは、ビューごとに1つのViewModelが推奨されます。

0

実際のハードとファーストのルールはありませんが、基本的にViewごとに1つのViewModelがあります。ビューモデルを複数のビューに共有したいという状況に陥ることはありますが、それはまれです。

0

画面上で見たいものと画面上の画面/コントロールがある状態を想像してみてください。特定の画面(ビュー)で必要なものはすべて、ViewModelでバインドできる対応するプロパティを持つ必要がありますへのビュー。したがって、これは特定のビューの単一のViewModelに変換されます。 ViewModel自体は、背面の1つまたは複数のモデルに結び付けることができます。少なくともそれは私がそれを理解する方法です。

関連する問題