Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Spring4d, Marshmallow, Änderungen überwachen (https://www.delphipraxis.net/191015-spring4d-marshmallow-aenderungen-ueberwachen.html)

Rainer Wolff 30. Nov 2016 08:53

Spring4d, Marshmallow, Änderungen überwachen
 
Hallo Delphianer,

ich versuche mich im Moment an ORM und Trennung von GUI und Businesslogik, mir fehlen aber für die Gui einige gute Ansätze, verschiedene Ansätze mit Livebindings (unter VCL), TObjectDataset und Databinding aus DSharp haben immer wieder Ecken und Kanten.

z.B. habe ich eine Klasse TProgramme, die eine property TProgrammschritte vom Typ IList<TProgrammschritte> enthält. Diese wird über ORM (Marshmallow) auch erfolgreich geladen.
Die TProgramme gehen in z.b. eine Listbox, wo sich ein einzelnes durch Klick selektieren lässt. In der Listbox oder Grid... werden dann die einzelnen Programmschritte angezeigt und lassen sich ändern (und zufügen/löschen).

Ich will nun die Änderungen in den Schritten im Gesamten speichern oder verwerfen und versuche, eine Änderung an den Schritten zu erkennen. Mit einer IObservableList könnte ich ja entsprechende PropertyChanged-Events auslösen und weiter oben z.b. ein Flag setzen, daß sich was geändert hat.
Ich habe aber keine ObservableList, sondern aus Marshmallow nur eine Objectlist.

Wer macht etwas in dieser Richtung und kann mir Tips geben, vielleicht gibt es auch etwas komplexere Projekte im Sourcecode, in denen man schauen kann, wie was gelöst wird.

Die ganzen Demos sind ja ganz nett, aber sobald das etwas komplexer wird, merkt man doch, es hakt da und dort.

Ghostwalker 30. Nov 2016 10:17

AW: Spring4d, Marshmallow, Änderungen überwachen
 
Hi,

ich bin grad an einem größeren Projekt, das mittels Oberserver-Pattern eben diese Trennung vollzieht.

Dazu hab ich mir erstmal, entsprechend der DB-Struktur, Datenobjekte geschrieben.

Ich nehm jetzt mal eine Tabelle aus dem Projekt als Beispiel: Repositories

Dazu hab ich mir 2 Klassen geschrieben (TRepository und TRepositories), die mir die Datenhaltung und
die Bearbeitungsmöglichkeiten und das Handling in der DB abnehmen.

Zusätzlich hab ich bei TRepository (quasi Einzeldatensatzbearbeitung/Detailansicht) eine Methodenliste
sowie die 3 Methoden Register, Unregister und Notify implementiert.

Wenn ein anderes Object sich bei TRepository registriert, wird es bei Änderungen entsprechend Benachrichtigt.

Bei TRepositories (quasi eine Liste der Datensätze) hab ich das gleiche, sowie zusätzlich
eine Methode, so das sich die Liste bei einer Detailansicht als Beobachter registrieren kann.


UI-Element hab ich im Moment ein Listview, das sich bei TRepositories als Beobachter registriert hat. Wenn also die Liste (TRepositories) sich nun ändert, wird der Listview benachrichtig und zeichnet sich neu.
Umgekehrt ist natürlich TRepositories auch wieder bei der Listview registriert um z.B. entsprechende
Änderungen an der Sortierung zu ermöglichen.

Analog dazu soll die Detail-Geschichte laufen. Hier kann sich (neben dem entsprechenden Formular) auch die Liste (TRepositories) beim Detail (TRepository) registrieren. Sobald sich der Datensatz ändert wird das Formular und die Liste benachrichtigt und können entsprechende Aktionen durchführen.

mkinzler 30. Nov 2016 11:05

AW: Spring4d, Marshmallow, Änderungen überwachen
 
Schau dir mal diese "Prototyp" an (angelehnt an dem JS MVVM-Framework KnockOut)
https://bitbucket.org/sglienke/knockoff


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf