2009-08-07 8 views
0

私はプロの開発者ではないため、WPVMのMVVMパターンを掘り出し始めていますが、時々少し失われてしまいます。MVVMの依存関係

私が持っている主な問題は、誰が誰を創造すべきかを決めることです:私は犬と猫を保管しているデータベースを持っているとしましょう。私はデータベース(Unit of Work !?)、DogRepository/CatRepository、Dogs/Catsオブジェクトと通信するDatabaseManagerを作成します。

反対側には、ユーザーがデータベースを開く/閉じることができるMainWindowがあり、猫用リストボックスと犬用リストボックスがあるため、MainWindowViewModel、CatsViewModel、DogsViewModelが必要です。

しかし、これらのオブジェクトを作成するにはどうすればよいですか?私のアプリケーションでは、明らかにMainWindowを作成します。その後? MainWindowViewModelを作成してMainWindowに渡すのか、あるいはMainWindowが独自のMainWindowViewModelを作成しますか? DatabaseManagerはどのように作成されますか? MainWindowViewModelによって?

CatsViewModelとそれに対応するCatRepositoryはどうですか? MainWindowViewModelはCatRepositoryを作成するCatsViewModelを作成しますか?私は本当に混乱しています。

答えて

1

これらのオプションがすべて有効なので混乱しています。依存関係注入を使用しておらず、ViewModelに必要なすべての情報が必要な場合は、ビューにViewModelを作成させない理由はありません(通常、ビューのStaticResourceで作成します)。

<Window.Resources> 
    <local:CatViewModel x:Key="catVM" /> 
</Window.Resources> 
<Grid DataContext="{StaticResource catVM}"> 
... 
</Grid> 

あなたはは、依存性注入を使用してしている場合、そのコンストラクタでビューの依存関係として、あなたのVMを宣言するために、まだ完全に有効です:

public CatView(CatViewModel vm) : this() 
{ 
    this.DataContext = vm; 
} 

最後のオプションは、両方を作成し、サードパーティのコンセプトですビューとビューモデル(ただし、適切です)と結婚します。fr両方の外側にあるom。通常これはプレゼンターと呼ばれます。

いずれにしても、これらはすべて有効なオプションです。あなたはあなたにとって最も適切なものを選ぶべきです。私は誰かが来て、冒涜を主張すると確信していますが、あなたのニーズとプロジェクトには本当にかかります。

+0

感謝。 WPFやMVVMに慣れるにはしばらく時間がかかりましたが、私はあなたの答えに感謝することができます。 – CaptainProton

+0

うれしい私は助けることができました! –

0

View-Model-ViewModel(MVVM)パターンでは、異なるクラスを作成する担当者を定義しません。したがって、MVVMコミュニティではさまざまなアプローチがあります。

私は、アプリケーションのワークフローを処理するアプリケーションコントローラまたはユースケースコントローラを使いたいので、ViewModelクラスとRepositoryクラスを作成する必要があります。

これは、プロジェクトのViewModelにサンプルに示されているどのように機能するかを具体的な例:

WPFアプリケーションフレームワーク(WAF)あなたの説明のための

http://waf.codeplex.com