2015-09-23 23 views
8

Wir haben ein Arbeitsprojekt in Windows 8.1, die kompatibel zu Win 10 gemacht wird. Jetzt ist die Anforderung, dieses Projekt in UWP zu konvertieren. In dem früheren Projekt haben wir PRISM als Rahmen für MVVM verwendet. Jetzt ist das Problem, dass für UWP-Anwendung die neue Version für Prism noch nicht freigegeben ist und wir erwägen, MVVMLight zu verwenden.Prisma vs MVVM Licht für UWP-Anwendung

Ich bin neu in diesen beiden Frameworks, dh PRISM und MVVMLight. Jetzt ist meine Frage, wie schwierig es sein wird, die Codebasis von PRISM nach MVVMLight zu verschieben. Wenn es schwierig wird, sollte warten, bis PRISM neuere Version veröffentlicht wird. Und wenn wir zu MVVMLight wechseln sollten, müssen die wichtigsten Änderungen vorgenommen werden.

Nach meiner Beobachtung ist die Code-Basis stark mit PRISM gekoppelt, wo es extensiven Einsatz von Schnittstellen wie IResourceLoader ist, ISessionStateService und so weiter über den gesamten Code. Außerdem habe ich gelesen, dass PRISM eine Lernkurve hat, MVVMLight dagegen nicht. Wenn wir also zu MVVMLight wechseln, muss ich zuerst PRISM lernen, um die Codebasis zu verstehen, und dann MVVMLight lernen, die Codebasis zu portieren. Wenn wir uns entscheiden, auf eine neuere Version von PRISM zu warten, die irgendwann in dieser Woche veröffentlicht wird, wird es dann wichtige Codeänderungen geben?

Wie wird Unit Testing in Bezug auf beide Rahmen unterstützt.

Da ist nicht viel Zeit für diese Aufgabe, die am effizientesten Weg sein wird, zu vergeben?

+1

* * „die Code-Basis ist mit PRISM hoch gekoppelt“ - Ich denke, das hier Ihr größtes Problem ist. –

+0

Okay. Könnten Sie bitte ein wenig darüber schreiben, welche Anstrengungen erforderlich sein werden, um zu MVVMLight zu wechseln, da wir noch keine Freigabe für die Verwendung von PRISM erhalten? Und ich habe gesagt, neu in beiden Frameworks. – Aakansha

+1

Sie brauchen kein schickes Framework, um MVVM für Sie arbeiten zu lassen, es macht nur ein paar Dinge leichter zu erreichen, wie zum Beispiel ** Dependency Injection **. Der heilige Gral ist, dass Ihr Code ** adaptiv ** sein kann, um Schichten zu ändern und Implementierungen als ** Interfaces ** auszusetzen. Wenn Sie ein ausgefallenes Framework verwenden, werden Sie höchstwahrscheinlich an dieses Framework gebunden, sofern Sie keine Möglichkeit finden, die Abhängigkeiten zu trennen. Dies ist ein ziemlich großes Thema, aber ich würde empfehlen, auf [adaptive code] zu lesen (http://www.amazon.co.uk/Adaptive-Code-via-Interface-Principles/dp/0735683204). –

Antwort

10

TL; DR : Kompilieren Sie den neuesten Prism-Code in Erwartung der neuen NuGet-Pakete.

Zuerst ein kleines Intro auf Prism, um alle auf den gleichen Fuß zu bringen. Prism ist ein MVVM-Leitfaden/Framework, der von Microsoft Patterns & Practices erstellt wurde. Sie veröffentlicht bis Version 5 für WPF/Silverlight. Außerdem veröffentlichten sie auch Prism für Windows Runtime für Windows 8 und später auf Win8.1/WP8.1 RT aktualisiert. Dies sind 2 verschiedene Codebasen, wobei die zweite im Hinblick auf Regionen usw. leichter ist, aber eine sehr nützliche Unterstützung für das Application Lifecycle Management bietet. Es ist ein weit verbreitetes Missverständnis zu glauben, dass sie gleich sind.

Im März wurde das Eigentum an Prism als Open-Source-Projekt auf die Community übertragen und steht unter GitHub zur Verfügung. Sie beschlossen, den gemeinsamen Code in einer PCL-Core-Assembly zusammenzuführen und Unterstützung für Xamarin Forms hinzuzufügen.

Ab heute gibt es keine RTM-Version von Prism 6 für UWP noch. Die Codebasis ist ziemlich nah mit only a few minor issues open veröffentlicht werden, aber nichts wichtiges verhindert die meisten Benutzer die Bits bereits zu verwenden. Zu diesem Zeitpunkt würde ich Ihnen empfehlen, das GitHub-Repository zu klonen, die Assemblys zu kompilieren und mit der Portierung Ihrer App zu beginnen. Es gibt ein paar brechende Änderungen (hauptsächlich Namespaces), aber Sie sollten in kürzester Zeit einsatzbereit sein. Sobald die RTM-Pakete verfügbar sind, löschen Sie die harten Referenzen und verwenden Sie NuGet.

Ich habe bereits eine unserer kleineren Apps portiert und ich plane, eines der größeren LOBs (über 60 Bildschirme) an diesem Wochenende zu portieren.


Um auf die Diskussion zurückzukommen, welches MVVM-Framework zu verwenden ist. Wenn Sie eine App mit nur wenigen Seiten haben, verwenden Sie kein Framework und halten Sie Ihren MVVM einfach. Wenn Sie komplexe LOB-Apps verwenden, haben diese Frameworks ihre Vorteile (und natürlich Nachteile). Es gibt viele Möglichkeiten (MVVM Light, Prisma, Caliburn Micro, ...) und alle sind gut.

Die Tatsache, dass Ihre Kollegen wählen für Prism einen Grund haben könnte wie Depechie erwähnt. An erster Stelle denke ich über Application Lifecycle Management, wo Prism weit überlegene Unterstützung bietet.

Mit einer korrekten Verwendung von Basisklassen sollten Sie in der Lage sein, die meisten Abhängigkeiten von jedem einzelnen ViewModel umzuformen, falls Sie schließlich zu einem anderen Framework wechseln wollen. Die Hauptunterschiede zwischen Prism für Windows Runtime und MVVM Light, die Sie beim Umschalten beachten müssen, sind VisualStateAwarePages, ViewModelLocator (Auto vs Eigenschaft für jede Ansicht), BindableBase für INotifyPropertyChanged und alles über die Anwendung Lebenszyklusverwaltung. Beide Frameworks sind gut, aber ich würde nicht empfehlen, eine vollständige LOB-Anwendung zwischen ihnen zu wechseln, da es einfach zu viel Arbeit ist (mögliche Fehler werden vorgestellt).

+0

Dank Bart. Ich habe ein QQ, ist Prism 6.0 nur Migration von Code mit neuem Namespace und Unterstützung von Basisbibliotheken von UWP?. Unterstützt es auch alle Steuerelemente von UWP wie adaptive Trigger, relative Panels usw. mit neuem Prisma 6.0? – Aakansha

+1

Kontrollen (z. B. Relative Panels) und adaptive Trigger sind reine UI-Angelegenheit.Das ist etwas, mit dem Sie normalerweise in Ihrem MVVM-Framework nicht zu tun haben, es sei denn, Sie möchten, dass Daten über Binding/Command/Behavior zu Ihrem Modell zurückkehren. – Bart

3

Windows 10 UWP-Apps sind weit weniger geeignet für eines der von Ihnen genannten Frameworks. Aufgrund ihrer reichhaltigen Navigationsfunktionen und anpassungsfähigen Layouts ist es schwer zu erkennen, wie gut Prism für Sie funktioniert. In Bezug auf MVVMLight, bietet es sehr wenig über Sie Ihre eigenen Viewmodels rollen, und es durch die Vermeidung Sie ausweichen können, die Möglichkeit einer fiesen Lock-in, das wird dich beißen später (die es oft der Fall ist)