AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

debuggen einer MVVM Anwendung,

Ein Thema von bernhard_LA · begonnen am 22. Dez 2017 · letzter Beitrag vom 25. Dez 2017
 
Benutzerbild von mael
mael

Registriert seit: 13. Jan 2005
391 Beiträge
 
Delphi XE3 Professional
 
#4

AW: debuggen einer MVVM Anwendung,

  Alt 22. Dez 2017, 17:13
Wenn meine Geschäftslogik keine Verbindung mehr zu UI hat, wie suche ich dann Laufzeitfehler in meiner Anwendung, Da ich ja Informationen über die aktuellen Daten die zum Laufzeitfehler führen nicht mehr vernünftig ausgeben kann
Wenn man WPF als Beispiel nimmt, so wird in XAML (so ähnlich wie DFMs) das Aussehen der GUI beschrieben, aber auch die Bindung an das ViewModel.

Das ViewModel hält die Daten für die GUI in einer möglichst geeigneten Weise vor. Z.B. eine Liste von Personen (TPersonList), eine aktuell ausgewählte Person (TPerson), und ein Kommando (ähnlich zu TAction) die eine Suche ausführt.
Pseudocode:
Code:
TViewModel = class
  property SelectedPerson: TPerson;
  property PersonList: TPersonList;
  property SearchPersonsCommand: ICommand;
  property SearchResultList: TPersonList;
end;
Die GUI wird immer aktualisiert wenn diese Eigenschaften sich ändern (also z.B. eine neue Person hinzugefügt wird, oder die ausgewählte Person sich ändert). Umgekehrt werden Änderungen der GUI zurück ins ViewModel geschrieben (z.B. wenn TEdit.Text geändert wird der den Namen einer Person enthält). Bindings erlauben es dies mit loser Kopplung zu erreichen, da weder GUI noch ViewModel voneinander wissen müssen.

Der Trick bei Bindings ist dass man gewisse Formalismen im ViewModel einhält, so dass Bindings kurz und knapp ausdrückbar sind, oder auch im Objektinspektor schnell erstellbar sind. Z.B. hilft die RTTI der Eigenschaften den Datentyp zu bestimmen, und es gibt Standardmethoden Propertyänderungen zu beobachten.
Wenn das gut implementiert ist, sind Bindings quasi nur ein paar Klicks.


Das Debugging kann ganz klassisch erfolgen, wenn Bindings zu einer konkreten GUI bestehen (was man normalerweise gleich zusammen mit dem GUI-Entwurf macht).

Man kann aber auch das ViewModel direkt testen, denn dort ist ja schon die meiste Benutzerinteraktionslogik drin. Z.B. sollen nach einer Personensuche in einer DB alle Treffer aufgelistet werden (SearchResultList) aber auch der erste Treffer (erste Person) ausgewählt werden (also SelectedPerson gesetzt werden).


Das meiste was man also testen oder abfragen will ist im ViewModel. Zur visuellen Unterstützung kann man auch mit GUI testen.

Bindings selber zu testen ist zumindest in XAML schwierig, weil man nicht durch den XAML-Parser und Binder-Code steppen kann. Aber da gibt es Tricks wie z.B. das Hinzufügen von Value-Converters. Die werden bei jeder Bindung ausgeführt um von einem Datentyp zu einem anderen zu konvertieren (geht auch wenn z.B. beide int sind, man aber z.B. weiß, dass diese ints ineinander umgerechnet werden müssen).

Man kann dann einen Haltepunkte in die Value-Converter setzen um zu sehen ob die Bindung überhaupt ausgeführt wird bzw. wann dies geschieht.
HxD, schneller Hexeditor:
http://mh-nexus.de/hxd

Geändert von mael (22. Dez 2017 um 17:44 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz