Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#43

AW: Frage zum Designkonzept MVVM unter Delphi

  Alt 25. Sep 2018, 02:50
Ich habe dieses Video

https://www.youtube.com/watch?v=virHepvMetw

sehr bereichernd und - für mich - praktisch nutzbar gefunden.
Bei 11:36 hab ich schon beim ersten Mal als ich das letztes Jahr gesehen habe, den Kopf geschüttelt - da hat der gute Olaf glatt vergessen, dass die Reihenfolge hier einfach genauso ist wie bei MVC oder MVP

Ansonsten ist es bis zur Implementierung eins der besseren Videos aus der Delphi Welt über MVVM - allerdings stimme ich bei der gezeigten Implementierung dann doch dem Kommentar unter dem Video zu.

Bei 35:40 fängt der Blödsinn nämlich an und es wird Interaktionslogik in die View geschrieben. Die Interaktion der Eingabe mit dem Daten holen gehört in das ViewModel. Bei MVVM geht jede Eingabe ins Edit per data binding in das ViewModel hinein und wenn ich den Knopf drücke wird ein Command aufgerufen. Das ViewModel nimmt dann die entsprechenden Daten, die aus der UI in es hineingeflossen sind und macht etwas damit. Danach liefert es eine Benachrichtigung, dass es neue Daten zum Anzeigen hat (meist auch über die entsprechende data binding funktionalität).

Das mag dem einen oder anderen wie Erbsenzählerei vorkommen, ist doch egal, hauptsache trennen - nein, man muss sich einfach immer vorstellen, ob man das ViewModel einfach so testen kann, indem man ihm einfach nur UI Inputs gibt. In der gezeigten Möglichkeit gibt es das nicht, ich kann dem VM nicht einfach sagen, ich hab hier in das Suchfeld das da eingegeben und dann die Suchen Aktion gestartet, mach was - denn wie diese beiden Dinge in Verbindung stehen, stand in der View!

Wenn man das schon mit RAD lösen möchte, dann würden Data aware Controls der Sache am nächsten kommen. Ins VM würde dann ein Dataset (ClientDataSet, FDMemTable oder was weiß ich), die kann man hervorragend an entsprechende TDBXXX Controls verbinden und hat bidirektionalen Datenfluss und Benachrichtigungen ohne LiveBindings.

Ob man das aber für jede Fitzeloberfläche, die man in seiner Anwendung hat, machen mag wo man doch bei anderen Sprachen, die MVVM etwas besser unterstützen, nur ne kleine Klasse schreiben muss anstatt sich öffzig Datenmodule mit allem Brimborium zu basteln, weiß ich nicht.

Im Übrigen halt ich auch in WPF oder Xamarin Forms MVVM für noch arg unhandlich. Erst in JS, wenn man das schön ins HTML einbetten kann, wie bei Knockout oder Aurelia, wirds interessant.

Wenn man sich nen vernünftigen vortrag zu MVVM anschauen möchte, dann empfehle ich, diese: https://www.youtube.com/watch?v=FWT-W72sy64 (sorry, kein Delphi und auch nicht grad MVVM 101)
Darin zeigt Rob Eisenberg (Author von mittlerweile einigen MVVM Frameworks), was man so an eigener Infrastruktur bauen kann und sollte, damit man vernünftig MVVM durchführen kann (das dürfte so aus seiner Caliburn.Micro Zeit sein, wenn ich mich recht erinner).

Wenn ich es richtig in Erinnerung hab, dann dürfte das hier ein ganz guter Einstieg in MVVM sein: https://www.youtube.com/watch?v=tKfpvs7ZIyo (sorry, auch kein Delphi, aber dafür sieht man, warum das mit XAML viel fluffiger funktioniert als mit LiveBindings oder ähnlichem, sorry kein RAD Drag&Drop Programmierung)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (25. Sep 2018 um 02:54 Uhr)
  Mit Zitat antworten Zitat