MVVM – Das Model- View- ViewModel

Das MVVM- Pattern setzt sich aus drei wesentlichen Bestandteilen zusammen. Der Repräsentant der Datenschicht ist hier das Model. In einem Model werden alle Daten, die für eine Anwendung zur Verfügung gestellt werden gespeichert. Je nach Szenario können mehrere Models existieren. Dem Model sind Methoden bekannt Daten zu laden und diese zu verwalten. Beispielsweise kann das Model an einen Webservice gebunden sein um Daten zu sammeln, diese zu speichern, oder zu manipulieren. In der Praxis werden für große Anwendungen meistens Datenbanksysteme verwendet um große Datenmengen zu verwalten. Um den Funktionsrahmen des Models zu verdeutlichen, ist nachstehend ein Beispielprojekt angeführt, was sich zu Gunsten der Erläuterung durch dieses Kapitel wie ein roter Faden ziehen wird.

clip_image002

Bild 1 Projekt für ein einfaches Data Binding

Im Visual Studio 2010 wurde eine einfache WPF Anwendung angelegt. Diese ist für die Demonstration ganz simpel gehalten und besteht aus den eben beschriebenen Elementen des MVVM. In allen folgenden Erläuterungen sind an jeder Klasse die Bezeichnungen der Bestandteile (Model, ViewModel, View) angefügt, damit es jederzeit möglich ist diese zu identifizieren.

In diesem Beispiel soll lediglich eine Statusnachricht in einem Fenster angezeigt werden. Die Nachricht könnte von einem Server abgefragt werden, um sicher zu stellen, dass dieser erreichbar ist.

Dafür wird ein Model angelegt, welches die Fähigkeit besitzen muss den Status abzufragen und die Information zu speichern. In diesem Fall wird der Datenbankzugriff nur simuliert, um die Komplexität des Quellcodes so gering wie möglich zu halten.

Nachstehend ist der Quellcode des StatusMessageModels abgebildet:
[sourcecode language=”csharp”]
namespace T_SimpleDataBinding
{
public class StatusMessageModel
{
public event EventHandler<StatusEventArgs>
StatusRequestCompleted;

public void BeginStatusRequest()
{
// Abarbeitung um 5 Sekunden verzögern.
// Dies dient der Simulation einer Datenbankabfrage.
Thread.Sleep(5000);

if (StatusRequestCompleted != null)
{
const string message = "Alles ist in Bestens!";

StatusRequestCompleted
(this, new StatusEventArgs(message));
}
}
}

public class StatusEventArgs : EventArgs
{
public string Result { get; set; }

public StatusEventArgs(string result)
{
Result = result;
}
}
}
[/sourcecode]
Listing 1 Model für Beispielanwendung „Einfaches Data Binding”

Hier wird in der Klasse StatusMessageModel als aller erstes ein Event angelegt. Dies kann von einer anderen Klasse abonniert werden. Wenn das Event oder auch Ereignis eintritt, kann der Abonnent sofort darauf reagieren. In unserem Fall nutzen wir das Event, um darüber zu informieren, dass die Statusabfrage erfolgreich geladen wurde und nun bereit steht. Die zu übertragene Information, in unserem Fall die Statusnachricht, wird mittels Ereignisvariablen an den Abonnementen gesendet. Dafür wurde eine Klasse StatusEventArgs geschrieben, die von EventArgs erbt. Das ist auch schon alles. Unser erstes Model ist fertig!

Das Model nutzt einem Anwender zunächst nicht viel, da es keine Kenntnis darüber hat, wie es sich auf einem Bildschirm präsentieren soll. Dafür wird eine Oberfläche benötigt, die in WPF oder Silverlight mit einer bestimmten Beschreibungssprache erstellt werden kann.

Gregor

Gregor Woiwode ist Angestellter der heco GmbH, wo er als Sofwareentwickler und Trainer tätig ist. Sein Fokus liegt in der Erstellung von Webportalen mit dem .NET- und Angular-Framework. Von 2007 bis 2010 studierte er Telekommunikationsinformatik an der Hochschule für Telekommunikation in Leipzig und schloss den Studiengang als Bachelor of Engineering ab. Derzeit studiert er im Studiengang Wirtschaftsinformatik um die Auszeichnung Master of Science zu erhalten.

What do you think? Please leave a Comment below!