MVVMC パターンに関するこの記事を読みました。質問があります。Controller を ViewModel に注入する必要がありますか、それとも ViewModel を Controller に注入する必要がありますか?
4 に答える
MVVMC は、View が ViewModel ペアに置き換えられた単なる MVC です。
- View は、XAML ベースのテクノロジの強力なデータ バインディング メカニズムを利用して、ViewModel とのみ対話します。
- ViewModel はコントローラーに通知できますが、コントローラーを挿入しないでください。
MSDN の Josh Smith のよく知られたサンプルに基づいて、単純なサンプルをまとめました...ここでコントローラーを紹介しました。
それはあなたが何をしているかによります。ほとんどの場合、コントローラーをどちらにも挿入する必要はないと推測しますが、必要な場合は、ViewModel で必要になる可能性が高くなります。説明させてください。
コントローラーで何をしているのですか?あなたは何かをしているに違いありません..その「何か」が「データがどのように見えるか」のみに関連している場合、それはビューに属します。「ユーザーに表示されるもの」に関連する場合は、ViewModel に属します。
ViewModel の 1 つにコントローラーを挿入しています。私のViewModelは、ビューでグラフ化されるデータを表します。現在のグラフから新しいグラフにデータ項目を移動するコマンドがあります。これにより「グラフ ウィンドウに表示される内容」が変更されるため、ViewModel にコマンドを実装しました。ViewModel は、独自の項目コレクションからデータ項目を削除し、Controller を使用して、その新しいデータ用に新しいビューを作成するように要求します (この機能は既にあります)。
記事を見るとコントローラーとビューの間に矢印が見えない
ViewModelは、ビューとコントローラーの間のコントラクトであり、理想的には、どちらかについて知る必要はありません(依存する必要はありません)。
したがって、私は間違いなくコントローラーをViewModelに注入しません。
逆のことをするかどうかもわかりません。通常、コントローラーは新しいViewModelインスタンスの作成を担当します。より緩く結合された実装を使用したい場合は、ViewModelクラスの新しいインスタンスを直接作成しないように、コントローラーに抽象ファクトリを挿入することができます。