MVVMパターンを使用してWPFアプリケーションを構築しています。現在、私のビューモデルは、サービスレイヤーを呼び出してモデルを取得し(ビューモデルとは無関係です)、モデルをビューモデルに変換します。コンストラクター注入を使用して、必要なサービスをビューモデルに渡します。
簡単にテストでき、依存関係の少ないビューモデルでうまく機能しますが、複雑なモデルのviewModelを作成しようとするとすぐに、多くのサービスが挿入されたコンストラクターがあります(各依存関係と使用可能なすべての値のリストを取得するためのもの)たとえば、itemsSourceにバインドします)。そのような複数のサービスをどのように処理し、簡単にユニットテストできるビューモデルがまだあるのか疑問に思っています。
私はいくつかの解決策を考えています:
使用可能なすべてのサービスをインターフェイスとして含むサービスシングルトン(IServices)を作成します。例:Services.Current.XXXService.Retrieve()、Services.Current.YYYService.Retrieve()。そうすれば、大量のサービスパラメータを含む巨大なコンストラクタはありません。
viewModelによって使用されるサービスのファサードを作成し、このオブジェクトを私のviewmodelのctorに渡します。しかし、その後、複雑なビューモデルごとにファサードを作成する必要があります。
この種のアーキテクチャを実装する「正しい」方法は何だと思いますか?
new
して他のビューモデルを作成するべきではないと言うことは理解できますが、「新しいドキュメント」ボタンまたはメニューをクリックすると新しいタブが追加されるか、新しいウィンドウが開くMDIアプリケーションのような単純なものを考えてください。シェル/コンダクターは、間接的な1つまたはいくつかのレイヤーの後ろに隠れていても、何かの新しいインスタンスを作成できる必要があります。