Es ist noch nicht soweit, aber ich überlege, welches Konzept das beste wäre, meine Daten später einmal über ein Netzwerk/Internet zu syncronisieren.
Folgender Stand:
Ich halte Daten zur Laufzeit im Hauptspeicher in Objekten. Diese verwalten die Daten und enthalten die Geschäftslogik. Zur Laufzeit wird eine Datei geladen und die darin definierten (Daten-)Objekte werden erzeugt (ähnlich einer
dfm).
Die Datenmenge ist so groß, dass sie im Speicher gehalten werden kann.
In einer
GUI-Schicht werden (anbhängig von den vorliegenden Datenobjekten) dynamisch passende sichtbare Objekte erzeugt, die die Daten darstellen und eine Bearbeitung ermöglichen (anbei mal zwei Screenshots). U.a. gibt es einen Designer, auf dem Objekte hinzugefügt, verschoben und gelöscht werden können. Diese Manipulationen werden dann an die Datenschicht weitergeleitet.
Lokal funktioniert das alles schon mal wunderbar.
Nun möchte ich (später einmal) eine Möglichkeit anbieten, im Netzwerk/Internet mit mehreren Clients auf die gleichen Daten zuzugreifen. Clients sollen dann die Berechtigung nur zur Einsicht oder auch direkt zur Bearbeitung der Daten erhalten können.
Ursprünglich hatte ich die grundsätzliche Idee, eine einfache Datenbank als zentralen Datenspeicher zu nutzen. Die Getter und Setter meiner Objekte müssten dann "einfach" auf die Datenbank statt auf Ihre eigenen Felder zugreifen.
Ich bräuchte 2 Tabellen:
- TableStructure bildet die Objektstruktur der ineinander verschachtelten Objekte ab: ObjectId, ObjectClass, OwnerId
- TableData enthält die Objektdaten: ObjectId, PropName, PropText
Die Client-Objekte müssten dann über Zeitstempel immer prüfen, ob in der Datenbank Änderungen vorliegen.
Ein besonderes Problem ist die Konfliktbehandlung, wenn z.B. von einem Client aus ein Objekt gelöscht wird (da wäre z.B. ein Feld "Destroyed" denkbar). (Gleichzeitige schreibende Zugriffe sind aber - zumindest in meinem aktuellen Projekt - kaum zu erwarten).
Ich hatte so etwas mal grob angetestet und das sah ganz erfolgversprechend aus. (Wenn ich eine Komponente auf meinem PC verschoben habe, wurde die auch auf dem Laptop im Client verschoben und umgekehrt - also grundsätzlich sollte das machbar sein).
Anscheinend könnte man aber auch Datasnap für die Kommunikation für solche Zwecke nutzen!?
(Videos ganz unten)
Im Beispiel wird ein kleiner Chat aufgebaut. Aber man kann ja auch Objekte über JSON übertragen!? Bzw. müssten die Clients einmal alle Objekte erhalten und sich dann gegenseitig über alle Änderungen informieren...
Der "Server" wäre der erste Rechner, der die Daten lädt. Die anderen würden sich als Clients anmelden (mit Lese- oder auch Schreibrechten).
Was wäre die beste Richtung - wenn ich unbedingt bei meinen Datenobjekten bleiben will.
(Eine klassische Datenbankanwendung kommt für mich nicht in Frage. Der User soll alles haptisch bedienen können und die Geschäftslogik soll in den Objekten bleiben.)
Die Datenbank(zwischenspeicher)lösung würde ich mir wohl grundsätzlich zutrauen.
Die Variante mit DataSnap klingt interessanter - wenn es denn so funktioniern kann.