Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#1

Konzeptfrage: Datenobjekte syncronisieren

  Alt 16. Jun 2011, 16:59
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.
Miniaturansicht angehängter Grafiken
o1.jpg   o2.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (17. Jun 2011 um 10:37 Uhr)
  Mit Zitat antworten Zitat