私の意見では "いずれも" ...コントローラークラスをMVVMのミックスに追加します。
ビューモデルにコントローラコードを置くことの問題は、独立してテストするのが難しくなることです。多くの点で、私はこれをコードの背後にある悪いものとみなしています。
MVVMにはコントローラがないものとみなされています.CM MVVMはMVCのバリエーションです(ViewModelsを追加するだけです)。
代わりにMVCVMと呼ばれているはずですか?
ViewModelsは、ビューから「GUI」コードをオフロードし、バインディングのためのデータを格納するためだけにあります。 ViewModelは処理を行うべきではありません。良いテストは、あなたのViewModelが自動ユニットテストによってテスト可能であり、データソースなどに依存しないことです。データが実際にどこから来ているのか(または誰がそれを表示しているのか)分かりません。
見落とすことも回避することもできますが、コントローラは表示するデータモデルとビューを決定する責任があります。 ViewModelは、モデル(MVVMのM)とビューの間のブリッジです。これにより、より簡単な「分離された」XAMLオーサリングが可能になります。
最近のすべてのプロジェクトで正常に使用しているパターンは、コントローラーをモジュールに登録し、起動時に初期化することです。コントローラーは非常に軽くてスリムで、メッセージを聞いたり、送信したりするアプリの寿命の間にハングアップする必要があるのは唯一のものです。初期化メソッドでは、必要なもの(ビューやビューモデルなど)を登録します。この軽量のロジックオンリーメモリのパターンは、よりスリムなアプリケーションにもなります(WP7の方が優れています)。我々は従う
基本的なルールは以下のとおりです。
- コントローラは を傍受する
- コントローラは、ビューモデルのICommandのプロパティを設定
- コントローラデータを取得し、適切なビューモデルのプロパティに配置するイベントに基づいて決定を下しますイベント
- コントローラはビューを表示します(他に暗示しない場合)
- ビューモデルは「ダム」です。彼らは、結合のためのデータを保持し、他には何
- ビューは、彼らがデータの特定の形状を表示する知っているが、最後の2つのポイントは、あなたが壊れることはありませんものかを分離している
からそれが来ないアイデア を持っていません心配は窓から出る。
ViewModelにイベント処理やロジックを配置するかどうかについては議論ができますが、今はModel for専用のものが欲しいですか?それは論理権利を持ってはいけませんか? – demaxSH
モデルにはビジネスデータが格納されています(ビジネスロジックはよくありますが、UIやアプリケーションロジックは使用されません)。それが消費される方法をモデルは決して知るべきではありません。 –