| 

.NET C# Java Javascript Exception

3
Architekturfrage zum MVVM-Pattern:

In einem Projekt gibt es mehrere ViewModels und thematisch zugehörige Models, die die entsprechenden Serviceaufrufe an den Server beinhalten.
Zum Beispiel:
- CustomerViewModel bekommt Daten über CustomerModel
- OrderViewModel bekommt Daten über OrderModel

Nun gibt es Serviceaufrufe, die beide ViewModels konsumieren möchten.
Duplikate in beiden Models halte ich für nicht wartbar.
Es gibt auch keinen Grund, warum der Serviceaufruf in CustomerModel oder OrderModel gehört. Beide wären gleichwertig.

Sollte für diesen Fall ein neues Model geschaffen werden als Sammelsurium für nicht eindeutig zuordenbare Serviceaufrufe? Das ist nicht wirklich schön.

Wie macht ihr das?


Zur Antwort von Mario erweitere ich meine Frage mit den zugehörigen code-snippets:

Das ViewModel instanziert das Model
Model = new CustomerModel();

und setzt damit auch die PropertyChanged-Events
private CustomerModel Model
{
get { return _model; }
set
{
if (_model != null)
{
_model.PropertyChanged -= ModelPropertyChanged;
}
_model = value;
if (_model != null)
{
_model.PropertyChanged += ModelPropertyChanged;
}
}
}


Durch ein "CustomModel", werden weitere Models instanziiert.

Spricht etwas dagegen oder ist das eine gängige Vorgehensweise?

Lösung:
Da es zum jetzigen Zeitpunkt keine weiteren Meinungen dazu gibt, machen wir das entsprechend Marios Anregung.
Es wird ein CustomModel erstellt, das alle nicht zuordenbare Serviceaufrufe beinhaltet.
04.04.2011
Jürgen Luhr 7,1k 2 9
2 Antworten
2
Ich erstelle für solche Zwecke "CustomModels", welches beide ViewModels bedienen kann. Ob das konform ist, kann ich nicht sagen, aber was spricht dagegen : )
04.04.2011
Mario Priebe 6,0k 3 9
Ist für mich derzeit die naheliegenste Lösung. Dagegen spricht aber, dass ich Service-Methoden, die ein ViewModel benötigt im namentlich passenden Model suchen würde.
Btw. wie machst du das mit den PropertyChanged-Events.
Ich erweitere meine Frage mit dem zugehörigen Code.
Jürgen Luhr 04.04.2011
1
Endlich ist eine Lösung gefunden.
Zwei Schritte waren hierfür nötig:

1. Wie Mario antwortete wurde ein CustomModel erstellt, das von mehreren ViewModels konsumiert wird.
Eine direkte Verwendung dieses Models fand ich nicht "sauber". Zum einen befinden sich darin Methoden, die von einem bestimmten ViewModel gar nicht benötigt werden und zum anderen instanziiert dadurch ein ViewModel mindestens zwei Models.

Dadurch wird ein zweiter Schritt erforderlich.

2. Um ein sauberes MVVM-Pattern zu erhalten, habe ich auf die Models das Facade-Pattern angewandt. Das Facade-Pattern hat zwei Aufgaben: Es vereint mehrere Models zu einem und es beinhaltet nur die benötigten Methoden.
So instanziiert das ViewModel nur noch ein Model und nicht benötigte Methoden werden durch die Fassade verborgen.
14.04.2011
Jürgen Luhr 7,1k 2 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH