München, 15.05.2015: Florian Fordermaier schreibt über “Analyse und Einführung von Technologien, um Legacy Code mit WinForm niederschwellig in testbare Architekturen (MVVM) zu überführen”.

MVVM (Model-View-ViewModel) ist ein etabliertes Pattern in der Frontend-Entwicklung. Um es ordentlich einsetzen zu können, ist es aber notwendig, dass UI Elemente mittels Binding an ViewModels gebunden werden können. WPF beispielsweise bietet eine mächtige Binding-Technologie, die das MVVM Muster dort als Quasi-Standard aufdrängt. Ältere Technologien, wie z.B. Windows Forms bieten zwar Binding Mechanismen, diese sind jedoch längst nicht ausreichend, um damit im MVVM Ansatz ordentlich arbeiten zu können. Glücklicherweise hat .NET eine große Community und qualitativ hochwertige OpenSource Projekte, die immer wieder Unzulänglichkeiten existierender Technologien kompensieren können.

Ein solches Projekt ist auch ReactiveUI (https://github.com/reactiveui/ReactiveUI).

Es ist ein MVVM Framework, das die Fähigkeiten der Reactive Extensions nutzt, um das MVVM Muster plattformübergreifend zu ermöglichen. Damit schließt es auch Windows Forms nicht aus. ReactiveUI liefert ein eigenes Binding-Framework, mit dem es möglich wird, MVVM auch in Windows Forms Projekten einzusetzen. Und damit ist nicht Schluss – es unterstützt desweiteren jede heute relevante Plattform im Desktop und Mobile Bereich für .NET Projekte.

Im Kontext von Windows Forms bietet es jedoch einen nicht offensichtlichen Vorteil, um Legacy-Technologie sukzessive zu entfernen. Je nachdem, mit welchem Pattern die Legacy Windows Forms Anwendung entwickelt wurde (MVC, MVP, NoPatternAtAll, …), kann ein meist geradliniger Refactoring-Prozess definiert werden, der das verwendete Pattern zu MVVM mit ReactiveUI transformiert. Der erste große Vorteil dieses Refactorings ist, dass während dieses Refactorings die Verantwortlichkeiten ordentlich getrennt werden und damit subkutanes Testen der Windows Forms Anwendung ermöglicht wird. In Legacy Anwendungen existieren oft überhaupt keine Tests. Nun hat man aber die Möglichkeit, auf ViewModel Ebene in Tests einzusteigen, die vorher undenkbar waren. Nichtsdestotrotz hat man weiterhin eine Windows Forms Oberfläche, die in einem weiteren Schritt durch seinen dünnen Binding Layer im CodeBehind (ReactiveUI) gegen eine WPF Oberfläche getauscht werden kann. Wenn das aufgrund der Projektgröße nicht in einem Schritt möglich ist, kann man sich in der Zwischenzeit auch mit der WPF-WinForms Interoperabilität helfen. Neben dieser Möglichkeit zur Sanierung einer Applikation ergibt sich noch ein weiterer entscheidender Vorteilaus der Verwendung von ReactiveUI gegenüber anderen MVVM Frameworks. ViewModels werden deutlich lesbarer, da Ihr Verhalten und Ihre Reaktionen mit Hilfe der Reactive Extensions deklarativ statt imperativ modelliert werden können. Ein schönes Beispiel hierzu findet man auf http://reactiveui.net/.

Bei aller Freude darf man aber nicht vergessen, dass der Einsatz von ReactiveUI eine gewisse Lernkurve bedeutet. Ein solides Grundwissen der Reactive Extensions und der dahinterliegenden Konzepte ist Voraussetzung, bevor man sich mit ReactiveUI beschäftigt.

IMG_8919_frei
Florian Fordermaier
Experte bei der Art of Quality GmbH