@Mavarik
Die Videos taugen aber nicht als sinnvolle Beispiele für MVVM.
@all
Die Diskussion gefällt mir und die genannten Gründe sind auch gut nachvollziehbar.
Aber die zu erzielenden Vorteile lassen sich evtl. auch leichter erreichen.
1) Vererbung DataObject zu BusinessObject
Ich habe in einem Framework einfache Datenobjekte deklariert. Z.B.
TDataPerson class
- Firstname
- Lastname
- Sex
und davon Businessobjekte abgeleitet
TPerson class(TDataPerson)
- FullName
- SexColorForGUI
- DataIsValid
- DoSomething(WithParam: Integer)
So habe ich klare Datenobjekte und kann die mit Eigenschaften für die BL und
GUI erweitern.
Im Rahmen meiner Anwendungen hat das wunderbar funktioniert. Die Klassen selbst wurden durch das Framework erzeugt und das Framework konnte sich auch selbstständig um das Laden und Speichern der Daten sowie um die Bindung an die
GUI kümmern.
Der MVVM-Ansatz soll ja das gleiche erreichen. Ok, er ist noch flexibler aber auch sehr viel aufwendiger.
[NACHTRAG: Das Binding zur GUI ist ja durch ein ViewModel in Delphi noch nicht gelöst. Das kommt ja als Aufwand sogar noch hinzu. Daher setze ich lieber auf ein Paket, das mir diesen gesamten Aufwand abnimmt.]
2) Komplett-Objekt
Grundsätzlich würde ich es auch nicht gänzlich ablehnen, Daten, Klassenlogik und GuiStatusinformationen direkt in einem Objekt unterzubringen.
Das obige Beispiel würde dann so aussehen:
TPerson class
[Data]
- Firstname
- Lastname
- Sex
[BL]
- FullName
- DataIsValid
- DoSomething(WithParam: Integer)
[
GUI]
- SexColorForGUI
Das würde Delphi natürlich so nicht hergeben, aber mal als grundsätzliche Überlegung:
Man könnte Daten definieren, die von überall erreichbar sind und persistiert werden können.
Dann gäbe es Eigenschaften, die von der Buinesslogik und von der
GUI aus erreichbar wären.
Und es gäbe Eigenschaften, die nur für
GUI relevant und erreichbar wären.
Man müsste so nicht alles doppelt schreiben und hätte dennoch gentrennte Bereiche für verschiedene Aufgaben.
-> Also wie gesagt, die Ziele des MVVM erkenne und vertrete ich. Ich hätte aber ganz gern einen leichteren Weg dorthin.