Einzelnen Beitrag anzeigen

Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Konzeptfrage: Interface oder Messages

  Alt 10. Nov 2016, 10:03
Ich verwirre Dich wohl mehr als geplant.

Ich war zuletzt davon ausgegangen, dass Du dem Formular alle Daten in Form von Objekten bzw. Objektlisten bereitstellt.
Wenn das Formular zur Anzeige der Daten nochmal auf die Datenbank zugreifen muss, sieht das natürlich noch etwas anders aus.
Dann kannst Du keine Objekte zur Benutzung übergeben sondern tatsächlich die Datensatz-Ids.

Grundsätzlich haust Du m.E. die Datenschicht und die Formularschicht zu sehr durcheinander.
Versuche doch mal, das noch konsequenter zu trennen. Dafür gibt es verschiedene Möglichkeiten. Am einfachsten, alles was die Datenmanipulation betrifft in eine eigene Unit auslagern.

Dann könntest Du theoretisch alle Änderungen ohne ein Formular durchführen. Z.B. in einer Methode oder über ein Script.
Dann hast Du eine Datenschicht (und Businesslogik), die für sich funktioniert.

Jetzt muss das Formular sich nur noch an diese Unit wenden und sagen, was es gerade braucht.
Dann kannst Du eine PKW-Liste in Form von kompletten Objekten oder als DataSet übergeben.
Auch kannst Du durch Aufruf bestimmter Methoden Änderungen in der Datenschicht veranlassen.
Ähm...die Trennung ist schon da

Die Listview wendet sich an das Listen-Daten-Objekt um Daten für die Anzeige zu bekomen. Genauso wie sich die Detailview sich an ihr Datensatz-Daten-Objekt wendet um Daten zu bekommen bzw Daten zu
manipulieren (vgl. Schaubild).

1. Kommunikations-Weg ohne Observer bei Änderung eines Datensatzes durch Detailview

User änder Daten in Detailview -> Detailview schickt die Daten an Datensatz-Daten-Objekt(DDO) ->
DDO ändert die Datenbank -> Detailview schickt nachricht an Listview -> Listview fragt Listen-Daten-Objekt (LDO) nach frischen Daten -> LDO aktuallisiert seine Daten von der DB ->Listview zeichnet sich neu.

2. Kommunikations-Weg mit Observer (so wie ich dich Verstanden hab):

a)Registrierung

LDO registriert sich bei DDO als Listener, die Listview registriert sich als Listener bei der LDO
(Den Rückweg lass ich mal der einfachheithalber außer Acht)

b) Der Weg

Wie unter 1. ändert der User die Detailview -> diese sagt dem DDO, das es die Daten ändern soll ->
DDO änder die Daten in der DB -> DDO schickt Nachrichten an seine Listener ->LDO bekommt nachricht und aktuallisiert seine Daten aus der DB->Benachrichtigt seine Listener, das es sich geändert hat->Listview zeichnet sich neu

Der Unterschied zwischen 1 und 2 ist also, das nicht die UI untereinander kommuniziert (wie bei 1), sonder die Datenobjekte untereinander (was nach etwas Überlegung auch mehr Sinn ergibt).
Miniaturansicht angehängter Grafiken
aufbau.jpg  
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat