Share with your friends










Submit

Die zu bevorzugende Architektur bei mobilen Apps ist die sog. ModelView-ViewModel – Architektur (MVVM).

MVVM ist eine Variante der Model-View-Controller – Architekturfamilie (MVC, oder MV*, wenn man generell alle Varianten von MVC meint), MV* ist generell die übliche Architektur, die in modernen Anwendungen angewendet wird. Man kann davon ausgehen, dass die allermeisten Entwickler – nicht nur C# – mit dieser Anwendungsarchitektur vertraut sind.

Sie wurde in den 90er Jahren bei Microsoft ‘erfunden’ worden ist, ursprünglich um einigen MS-spezifischen Besonderheiten in Anwendungen mit Windows Presentation Foundation (oder später auch Silverlight) besser gerecht werden zu können. Inzwischen hat ces sich weit über seine Ursprünge hinaus verbreitet.

Auf das Wesentliche reduziert kann man das MVVM-Architekturmodell etwa so darstellen:

 MVVM_simple

Der Gegensatz plattform-spezifisch vs. -unabhängig spielt bei der Entwicklung von Ein-Plattform-Anwendungen (also z.B. Windows-Anwendungen) keine Rolle.

MVVM wurde vor allem auf die strikte Trennung von Präsentations- und Geschäftslogik, die Minimierung des Glue-/Boilerplate-Code, sowie durch die Trennung der einzelnen Komponenten resultierende Test und Wartbarkeit geachtet. Der Einsatz in der Multi-Plattform-Entwicklung war damals noch nicht aktuell. Wenn man MVVM einfach ohne weitere Modifikationen auf eine Multi-Plattform-Umgebung überträgt, ergibt sich folgendes Bild:

 MVVM_multiplatform_unmodified

Mit jeder weiteren Plattform kommen View und Viewmodel hinzu, nur die Geschäftslogik kann geteilt werden. Dies ist unbefriedigend, weil wir ja den Anteil an plattformspezifischem Code möglichst gering halten wollen.

Hier gibt es das Framework MvvmCross, welches dieser Situation Rechnung trägt, eine weitere Abstraktionsschicht über die ViewModel-Komponente legt, und sie dadurch zum einen plattformagnostisch und zum anderen wiederverwendbar macht. Mit MvvmCross läßt sich der Anteil des plattformunabhängigen, wiederverwendbaren Codes deutlich erhöhen (Fussnote: Ein weiterer, gerade im mobilen Bereich sehr wichtiger Aspekt ist Testbarkeit. Dabei ist es so, dass plattform-spezifischer Code wesentlich schwerer zu testen ist als plattformübergreifender – dies liegt zum einen daran, dass Benutzeroberflächen grundsätzlich nurt schwer und aufwändig zu testen sind, zum anderen können manche Techniken auf Mobil-Plattformen erst gar nicht eingesetzt werden. Auch deshalb ist es wichtig, möglichst viel Code in den Bereich ‘plattform-unabhängig’ zu verlagern.).

Die Architektursituation unter Verwendung von MvvmCross:

MVVM_multiplatform_MvvmCross

Mit Xamarin und MvvmCross lassen sich also die kostenintensiven Anteile an einem Cross-Platform – Projekt so weit als möglich minimieren, während die Vorteile einer je plattform-nativen Anwendung erhalten bleiben und ein klarer Fokus auf Produktivität der Entwicklung und Testbarkeit/Wartbarkeit der zu entwickelnden Anwendung gelegt wird.

Die folgende Seite fasst die wichtigsten Punkte der Entwicklung mit Xamarin und MvvmCross zusammen.