Ich erstelle eine WPF-Anwendung mit dem MVVM-Muster. Momentan rufen meine Ansichtsmodelle die Serviceebene auf, um Modelle abzurufen (was für das Ansichtsmodell nicht relevant ist) und sie in Ansichtsmodelle zu konvertieren. Ich verwende die Konstruktorinjektion, um den erforderlichen Dienst an das Ansichtsmodell zu übergeben.
Es ist leicht zu testen und funktioniert gut für Ansichtsmodelle mit wenigen Abhängigkeiten. Sobald ich jedoch versuche, Ansichtsmodelle für komplexe Modelle zu erstellen, wird in einen Konstruktor eine Menge Dienste eingefügt (einer zum Abrufen aller Abhängigkeiten und eine Liste aller verfügbaren Werte) um zum Beispiel an eine itemsSource zu binden). Ich frage mich, wie ich mit mehreren Diensten wie diesen umgehen soll und habe immer noch ein Ansichtsmodell, das ich problemlos testen kann.
Ich denke an ein paar Lösungen:
Erstellen eines Services Singleton (IServices), der alle verfügbaren Services als Schnittstellen enthält. Beispiel: Services.Current.XXXService.Retrieve (), Services.Current.YYYService.Retrieve (). Auf diese Weise habe ich keinen riesigen Konstruktor mit einer Vielzahl von Dienstparametern.
Erstellen einer Fassade für die vom viewModel verwendeten Dienste und Übergeben dieses Objekts in den ctor meines viewmodel. Aber dann muss ich für jedes meiner komplexen Ansichtsmodelle eine Fassade erstellen, und es könnte ein bisschen viel sein ...
Was ist Ihrer Meinung nach die "richtige" Art, diese Art von Architektur zu implementieren?
new
zum Erstellen anderer Ansichtsmodelle verwendet werden sollten, aber man denke an eine einfache MDI-Anwendung, bei der durch Klicken auf die Schaltfläche "Neues Dokument" oder das Menü ein neuer Tab hinzugefügt oder ein neues Fenster geöffnet wird. Die Shell / der Dirigent muss in der Lage sein, neue Instanzen von etwas zu erstellen , auch wenn es sich hinter einer oder mehreren Indirektionsebenen verbirgt.