Nach 2 Jahren habe ich immer noch Probleme mit MVVM als praktischer Methode zur Herstellung funktionierender Software. In einigen Fällen ist es großartig. Ich habe eine Multithread-Anwendung erstellt, die eine kleine Montagelinie steuert, die ohne MVVM-Konzepte ein Albtraum gewesen wäre. Eine Abstraktion vom physischen Fließband war fast ein Kinderspiel.
Meine Karriere dreht sich jedoch hauptsächlich um interne Geschäftsanwendungen - die Formalisierung und Optimierung des Geschäftsbetriebs. In solchen Apps gibt es im Allgemeinen einen Geschäftsbereich, der sich um CRUD- und Compound-Operationen dreht. In LOBs sind meine Ansichtsmodelle eine sehr einfache Sammlung von Einzeilen-Wrapper-Funktionen der Business-Class-Methoden und erschweren letztendlich nur die einfachsten Aufgaben wie das Anzeigen eines Meldungsfelds oder das Öffnen eines Fensters. Findet es sonst niemand seltsam, wenn Leute für einen Window.ShowDialog-Aufruf, der seit Jahrzehnten existiert, lange Beschreibungen von "Abhängigkeitsinjektion" und "Messaging-Anbietern" lesen? Wie viele andere Fragen gibt es zum Stapelüberlauf, um Ratschläge für Aufgaben zu erhalten, die in Winforms extrem einfach waren?
Verstehen Sie mich nicht falsch - ich verstehe MVVM und wie es für große Teams von unschätzbarem Wert sein kann, wenn sie ein eingeschweißtes und vermarktetes Softwarepaket horizontal entwickeln. Durch Unit-Tests der Ansichtsmodelle könnten Millionen eingespart werden, indem ein schlechter RTM-Fehler vermieden wird, und engagierte Benutzeroberflächenentwickler könnten eine umfassende Erfahrung bieten. Aber wenn die Kosten für die erneute Bereitstellung minimal sind und das Unternehmen nur für einfach funktionierende Software bezahlen muss, warum sollte ich dann Zeit damit verbringen, einen einfachen "Wrapper" vm zu testen, wenn meine Geschäftslogik bereits einheitlich getestet wurde? Wie viel Zeit wird mir das Geschäft wirklich erlauben, um niedliche Animationen und Farbschemata zu verwenden? Gibt es noch etwas zu tun für einen Junior-Entwickler (Aufspüren eines Fehlers in einer Speicherfunktion, die früher unter "Save_Click" angezeigt wurde?
Zugegeben, ich mag die Datenbindung von WPF sehr. Um dies zu nutzen, setze ich den Datenkontext auf das Fenster selbst, in dem es Zugriff auf die Business Class sowie auf alle anderen beobachtbaren Eigenschaften hat. Ja, ich verstoße damit gegen fast jede MVVM- "Regel". Aber zumindest habe ich einfachen ereignisgesteuerten Code, der leicht zu lesen ist UND ich kann die neue Datenbindung und Validierung nutzen. Das Problem liegt bei den Designern - die ich nicht allzu oft benutze, aber bis jetzt hoffe, dass sie 2012 besser integriert werden - zeigt der Designer die Hunderte von Eigenschaften, die ein Fenster und seine Basisklassen haben.
Für diejenigen, die sich darauf beziehen können, können Sie mich auf Ressourcen, Bücher oder auch nur auf Perspektivwechsel verweisen, die das Schlucken erleichtert haben. Ich werde MVVM noch einmal ausprobieren, aber das letzte Mal, als ich mich ziemlich dumm fühlte, weil ich mir Sorgen über die Abhängigkeitsinjektion gemacht habe, nur um ein Meldungsfeld von einer VM zu zeigen, hatte ich nicht die Absicht, Unit-Tests durchzuführen. Selbst wenn ich einen Unit-Test durchgeführt habe, erhalten wir dann wirklich mehr Qualität, indem wir Laufzeit-Tests gegen Kompilierungsfehler dieser gefürchteten "eng gekoppelten" Anwendungen eintauschen?
Mir ist klar, dass eine Antwort darin besteht, einfach in Winforms zu bleiben. Aber als einer der letzten Unterstützer von WebForms (ich habe fast die gleiche Kritik am Trend der Webentwicklung) fühlte ich mich ein wenig wie ein Dinosaurier, als ich entdeckte, dass in den Microsoft-Zertifizierungsspuren keine WebForms mehr vorhanden sind. Vorwärts zu kommen ist die einzige Option, auch wenn es mir nicht gefällt.