Ist MVVM in WPF veraltet? [geschlossen]

18

Ich versuche gerade, MVVM für WPF in den Griff zu bekommen - ich meine nicht, dass ich mich mit dem Konzept befasse, sondern mit den Grundlagen, etwas zu tun, das weiter vom Schuss ist als dummes CRUD.

Was mir aufgefallen ist, dass viele der Frameworks und die meisten / alle Blog-Beiträge aus "Ewigkeiten" stammen.

Ist das so, weil es jetzt ein alter Hut ist und die Blogger auf das nächste große Ding umgezogen sind, oder nur, weil sie alles gesagt haben, was es zu sagen gibt?

Mit anderen Worten, fehlt mir hier etwas?

Benjol
quelle
1
MVVM Frameworks für WPF wurden weiter aktualisiert. Das brandneue Thema Reactive Programming [google it!] Ist als MVVM über ReactiveUI verfügbar . 3 der Top 10 wpf-Nuget-Downloads sind MVVM-Frameworks: Prism.WPF, MvvmCross, Caliburn.Micro. AFAIK, all dies unterstützt auch Xamarin.Forms und UWP und wird daher für die kommenden Jahre relevant sein.
ToolmakerSteve

Antworten:

6

MVVM ist nicht veraltet, wurde aber zu Beginn überspielt. Ich mochte es nie und es hielt mich zu lange in WinForms; Ich konnte den Wald vor lauter Bäumen nicht sehen und warf das Baby mit dem Badewasser hinaus. Ich bekomme jetzt WPF und komme auf die Idee, Code nicht mit Markup mischen zu wollen, aber ich bevorzuge den Android - Stil, das Markup an einer Stelle festzuhalten und es mit Casts in meinem Code zu dereferenzieren (was Sie auch in WPF tun können, sogar obwohl es aus irgendeinem Grund nie trendy wurde, dies zu tun).

Auf diese Weise erhalten Sie eine feinkörnigere Kontrolle und müssen sich nicht um das "veränderte" Handling überall kümmern. Ich halte dies für testbarer, da Tests dies nicht immer nachvollziehen können, wenn Sie ein "verändertes" Ereignis verpassen.

Sie verlieren ein wenig an "deklarativer" Qualität, was heutzutage ein Trend zu sein scheint (z. B. wenn zwei Widgets demselben Wert zugeordnet sind, können Sie dies in MVVM einfach tun, während Sie bei imperativem Code beide einzeln festlegen müssen). . Aber selbst mit MVVM funktioniert das nur im einfachen Fall. Wenn in einem Widget das Protokoll eines anderen Widgets angezeigt werden muss, müssen Sie einen anderen Handler und ein anderes "onchanged" -Ereignis schreiben und die Definition von "deklarativ" erweitern, um dies zu bestätigen.

Update 2015

WPF MVVM war für seine Zeit (r) evolutionär. Wie war WPF. Aber beide hatten ihre Warzen. In normalem WPF war zu viel (und es wurde auf XML aufgebaut) eingebaut, und es war eine Art Schmerz, mit dem man sich befassen musste. (Wenn WPF nur einen "Bibliotheks" -Ansatz anstatt eines "Framework" -Ansatzes gewählt hätte, hätte es sich in ein paar wirklich coole Sachen verwandeln können, und das gesamte Tech-Universum könnte jetzt völlig anders sein.) Die Idee von MVVM war großartig, aber der Versuch, eine MVVM in WPF einzubauen, war etwas hackig, da 1) C # es ohne viel Boilerplate nicht wirklich ausdrücken konnte und 2) WinForms-Relikte wie modale Popups immer noch ideologisch weit verbreitet waren, dies aber nicht konnten leicht in MVVM vertreten sein. So saugte alles.

Das heißt, es ist immer noch die einzige realistische Option unter Windows, wenn Sie Transparenz oder GPU für LOB-Apps benötigen.

Die Reaktion hat MVVM natürlich überholt. Ich war enttäuscht, dass VS2015 keinen nativen Zähler dafür hatte. Für den Moment stecken wir immer noch in Raw-WPF (das ist in Ordnung, fühlt sich aber alt an (fühlt sich jetzt wirklich genauso alt an wie Winforms) und verfügt nicht über eine Menge eingebauter Funktionen (fühlt sich an wie ein cooles, aber verlassenes Projekt). oder mit-MVVM, was sich an dieser Stelle wie viel Aufwand für nichts anfühlt, da selbst gutes MVVM (Winkel 1) für seine Mängel entlarvt wurde.

Ich würde WPF MVVM vermeiden. Es ist eine zusätzliche Schicht, und niemand kümmert sich mehr darum.

Dax Fohl
quelle
3
Hmm .. Mir ist klar, dass es zum Teil eine Frage der Religion ist, aber ich habe mit MVVM in WPF angefangen, indem ich Cinch verwendet habe. Mmm. 2010? Und es hat mir sehr gut gefallen. Seitdem bin ich zu Caliburn.Micro und Angular gewechselt und liebe es immer noch - offensichtlich gibt es eine Menge Mängel in MVVM, wie Sie sagten (es gibt merklich keine unkomplizierte Art, Dialoge zu führen). MVVM mag sich ziemlich ausführlich anfühlen, aber die allgemeine Lesbarkeit und die explizite Lücke zwischen UI-Design und Implementierung machen es für mich immer noch lohnenswert.
cwap
4
"Reagieren hat MVVM natürlich überflüssig gemacht" - dennoch verwendet der Großteil der Branche Angular.
Den
Allzu viel, bis Sie sich dazu entschließen, Ihre Desktop-App ins Web zu verlagern, und alles, was Sie haben, ist eine Menge Code-Behind, der an WPF-Steuerelemente gebunden ist.
CAD Kerl
1
Ist React and Angular nicht eine JavaScript-Umgebung? Was hat das mit WPF zu tun? Oder vermisse ich etwas?
Berin Loritsch
1
@BerinLoritsch - Ihnen entgeht nichts. Dieser Absatz ist für diese Fragen und Antworten irrelevant. anscheinend ist Dax von WPF zu Web-Programmierung übergegangen. Äpfel und Orangen.
ToolmakerSteve
2

Alles gesagt und getan, gibt es eine Grenze, was Sie mit einem MVVM-Framework tun können.

Sie sind "erledigt", da WPF seit der Veröffentlichung durch Microsoft nicht weiterentwickelt wurde. Wenn die Technologie aktualisiert würde, müssten auch die Bibliotheken aktualisiert werden. Das ist nicht passiert.

Oded
quelle
Also ist WPF veraltet? Ihren ersten Satzes in Bezug auf : ist es , dass im wirklichen Leben UI und Code sind zu einfach miteinander verflochten es einer realistischen Aussage zu machen, oder könnten einige Verbesserungen in WPF haben es den Heiligen Gral gemacht (oder fast?)
Benjol
3
@Benjol - Offenbar hat Microsoft WPF aufgegeben (oder aktualisiert die Technologie zumindest nicht mehr). Mein Standpunkt zu MVVM-Frameworks ist nur, dass es für die beabsichtigten Zwecke wenig gibt, um sie auf einer veralteten Plattform fortzusetzen und zu erweitern. Ich weiß nicht, warum Microsoft die Aktualisierung von WPF eingestellt hat, aber ich bezweifle, dass Sie dies vorschlagen. Es ist wahrscheinlicher, dass Windows 8 und RT die Ressourcen von WPF weggenommen haben.
Oded
18
Das ist nicht wahr. WPF wurde mehrmals aktualisiert, zuletzt in .NET 4.5: msdn.microsoft.com/en-us/library/bb613588.aspx
17 vom 26.
3
Es ist auch erwähnenswert, dass MS ihre Entwicklertechnologien für immer unterstützt. MFC, das 1992 veröffentlicht wurde, wird weiterhin mit jedem Release / Service Pack von Visual Studio behoben.
17 von 26
5
Ich würde sogar behaupten, dass der Mangel an neuen WPF-Ergänzungen ein Hinweis auf seine Reife ist. Wie @Oded bereits erwähnt hat, werden Desktop-Apps, obwohl sie immer noch ihren Wert haben, jetzt durch mobile Apps ersetzt. Es ist jedoch erwähnenswert, dass ein Großteil dessen, was WPF gestartet hat (deklarative UI-Programmierung, MVVM, DependencyProperties und Datenbindung), jetzt in WinRT- und Web-Technologien (mehrere JS-Frameworks) weiterlebt. Dies sind Kernwerte, die das Feld erheblich vorangebracht haben, und ich glaube, dass sie dies noch lange tun werden.
Sebastian