Der Weg zum eigenen MVVM-Framework – Part 4 (Einbindung der Services-Funktionalität)

Weiter geht es mit unserer Reihe zum eigenen Framework. Dieses Mal kümmern wir uns um die Einbindung unserer Service-Funktionen. Also quasi das Registrieren, das rückgängig machen einer Service Registration sowie das holen von Services. Aber zunächst einmal sollten wir klären, was ein Service ist. Ein Service ist ein Dienst, welcher innerhalb einer gewissen Gültigkeits-Reichweite definiert wird. In diesen Fall sind die Services alle für die Applikation und auch nur innerhalb dieser sichtbar. Hierbei sollte man wissen, dass dies bei unserer Umsetzung nicht mehr darstellt als eine Interface gesteuerte Singleton Sammlung unserer Klassen. Auch wird dies nun das Komplexeste, was unser Framework bisher zu bieten hat. Erneut werden wir wieder so vorgehen, das zunächst die Definitionen erfolgen anschließend die Tests und zum Abschluss die Implementierung. Ebenfalls sollte beachtet werden, dass das Wissen aus diesen Part noch relevant sein wird in zukünftige Parts. Aber nun gut lasst und das proggen beginnen!
Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 3 (Einbindung der Core-Funktionalität)

Dieses Mal wollen wir uns darum kümmern, die noch offene Kern-Funktionalität komplett einzubinden. Dies wäre jedoch für die erste Version dieses Frameworks lediglich eine Klasse welche die Standard.NET-String-Klasse um einige Funktionen erweitert. Aber nichts des so trotz lasst und damit beginnen, den auch diese Klasse will erst mal geschafft sein! Beginnen wir also erneut damit, zunächst die Ordner Struktur festzulegen, in welcher unsere Klasse einmal liegen soll.Anschließend werden wir wieder die leere Klasse definieren. Wenn dies auch geschehen ist, wird es aufgrund des Grey-Box-Testverfahren dazu übergehen, die UnitTests zu implementieren. Und zu guter Letzt wird natürlich wieder die eigentliche Funktionalität implementiert. Nun gut, also lasst uns beginnen!
Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 2 (Implementierung bestehender Funktionen)

In diesen Part kümmern wir uns um die Einbindung der bereits im Blog entstanden Funktionen (ViewModel, ExtendedPropertyBase sowie PropertyChangedBase). Um hierbei den Grey-Box-Verfahren zu entsprechen, werden zunächst alle Grundgerüste der Reihe nach angelegt, anschließend die UnitTests und erst dann die Implementierung der Funktionalität. Beginnen wir mit der Definition, was sinnvoll zu testen ist. Zunächst ist es natürlich Sinnvoll unsere beiden Property-Klassen “PropertyChangedBase” sowie “ExtendedPropertyBase” nahezu vollständig zu testen (AusnahmeDispose). Aber was ist mit unserer ViewModel-Klasse? Hier finde ich, sind Tests un-sinnvoll Die nötigen Tests wären aufgrund der Asynchronität komplex und da wir nur fertige .NET-Funktionen direkt aufrufen, ist das testen auch nahe zu unsinnvoll.  Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 1 (Projektstruktur)

Im ersten Schritt auf dem Weg zum eigenen MVVM-Framework liegt neben der Planung auch schnell die Projektstruktur. In diesen Tutorial werde ich jedoch die bereits erledigte Planungsphase Stück für Stück mit den passenden „Tutorial“-Part veröffentlichen. Auch möchte ich darauf Hinweisen, dass es Hilfreich ist folgende Posts zunächst zu lesen, bevor Ihr mit diesen fortfahrt:

Bitte beachtet hierbei das ebenfalls bereits ein Grundverständnis für C# und .NET Framework bestehen sollte. Hier reichen allerdings Grundkenntnisse. Nun gut, fangen wir an mit unserer Projektstruktur.

Zunächst einmal hätten wir da unseren Aufbau. Dieser ist das Elementarste überhaupt im Framework, den nur wer weiß wo sich was befindet kann auch damit Arbeiten. Zunächst habe ich mir deshalb darüber Gedanken gemacht, welche Projekte es geben soll und wie diese zusammenhängen. Siehe hierfür die folgende Grafik.

Aufbaustruktur.png

Aufbaustruktur des SmallMvvm-Frameworks

Nun gut, was haben wir hier also nun. Weiterlesen

Ankündigung eines MVVM-Frameworks

Da es ja nun bereits einige Mails sowie Rückmeldungen in diversen Foren gab und auch ein kleinen Qualitäts hinweis, vielen Dank an HalloWorld an dieser Stelle, habe ich mich nun dazu entschlossen ein OpenSource MVVM-Framework zu Entwickeln welches die nächsten Blog-Posts begleiten wird. Dabei werde ich die Aspekte von TestDriven (Grey-Box) berücksichtigen und genau mein Vorgehen erläutern. Ich hoffe zum einen das ich damit die Qualität und Einzigartigkeit des Blogs verbessern kann aber vor allem natürlich anderen damit helfen kann.

Nähere Informationen zu den Projekt findet ihr im Redmine: https://redmine.kruse-familie.eu/projects/small-mvvm (Anmeldung benötigt)  Weiterlesen

Falscher Thread? Kein Problem!

Hmpf.. mal wieder eine Exception wegen einer Aktion aus einem falschen Thread? Wiedermal notwendige Asynchronität die dennoch der Entwicklung im Weg steht. Naja viele kennen dieses Problem bereits und jeder hat seine Lösungen hierfür. Allerdings ist dies oft so das es sich bei diesen „Lösungen“ um Copy&Paste handelt, welches nicht zwingend zur Wartbarkeit von Sourcecode beiträgt. Wie wäre es jetzt also, wenn wir eine Klasse hätten welche unsere Aktionen mit dem richtigen Thread Synchronisiert? Das wäre doch fantastisch, oder etwa nicht? Exakt eine solche Klasse befindet sich in vielen MVVM-Frameworks und auch außerhalb solcher Frameworks ist diese immer mal wieder eine große Hilfe. Den asynchrone Operationen lassen sich nicht vermeiden, spätestens wenn längere Prozesse direkt vom GUI-Thread gestartet werden und dies die Benutzeroberfläche einfriert ist Asynchronität gefragt. Allerdings möchte man hier auch wenn die Daten sich verändern, dass die Benutzeroberfläche dies soweit mit bekommt. Hierfür haben wir zwar bereits eine PropertyChangedBase-Klasse gebaut, aber diese ist nun mal nicht in der Lage Aktionen aus anderen Threads durchzuführen.  Weiterlesen

Model-View-ViewModel (MVVM)

Beim Model-View-ViewModel (MVVM) ist eine Architektur um Software zu entwickelt. Hierbei gibt es eine klare Trennung zwischen Daten und Funktionalität hin zur Benutzeroberfläche. Zusammen mit MVVM empfiehlt es sich auch noch Test getriebene Entwicklung zu betreiben um so die maximale Qualität der Software zu sichern. Die hierbei entstehende Aufteilung soll uns die folgende Grafik näher erläutern.

Aufbaustruktur von MVVM.

Aufbaustruktur von MVVM.

Weiterlesen

Propertys mal ganz anders

Wer kennt es nicht? Das nervige anlegen von Backing-Fields für Propertys. Das anschließende Invoken von Änderungen dieser Propertys und den auch noch das setzen von Standardwerten. Da wäre es doch nahe zu Perfekt, wenn dies auch gehen würde ohne dass diese extra Aufwände notwendig sind, nicht wahr? Einen Hinweis vorweg, dieser Code benötigt die bereits erstellte Klasse aus dem Post „PropertyChanged – Komplett und kompakt!„, welches ich am 3. Februar bereits hier veröffentlicht hatte. Ebenfalls sollte bedacht werden, das wiedermal mindestens .NET 3.5 erforderlich ist. Die Erweiterung durch .NET 4.5 ist eher „nett“ als wirklich nötig.  Weiterlesen

PropertyChanged – Komplett und kompakt!

Wer kennt es nicht, immer wieder das Ableiten von „INotifyPropertyChanged“ und das nervige Implementieren dieser Funktionalität. Auch wenn inzwischen der neue ReSharper in der Lage ist, diese Methode automatisiert komplett zu Implementieren, so ist dies bei weitem noch nicht beim maximalen Komfort. Aber natürlich gibt es hierfür einige Nützliche Wege dies zu umgehen. Ich würde hierfür eine eigene Klasse empfehlen von welcher in Zukunft Abgeleitet werden kann. Natürlich setzt dies auch wiederum etwas voraus und zwar ist dies bei meiner Umsetzung das mindestens .NET Framework 2.0 verwendet wird. Ist dies der Fall kann diese Klasse bedenkenlos Verwendet werden da diese explizit die .NET Version filtert. Den maximalen Komfort bietet diese Klasse jedoch erst mithilfe von .NET 4.5 bei welchen nicht einmal mehr ein Übergabe Parameter notwendig ist.  Weiterlesen