Ich habe mal ansatzweise überlegt, wie so eine Anwendung strukturiert wird.
Also ich würde mir das wie in der Skizze vorstellen:
Im Server gibt es eine Factory, die auf Anfrage Businessobjekte erzeugt bzw. heraus gibt.
Z.B. die Schüler, Lehrer, Klassen und Zimmer einer Schule.
Bei der Anfrage kann die ID des gewünschten Objektes übergeben werden. Sonst kann auch ein neues Objekt erzeugt werden.
Die Factory bleigt Eigentümer der Objekte und gibt die nach einiger Zeit und vollem Puffer wieder frei.
Intern werden die Daten über einen ORM aus einer Datenbank geholt.
Die gesamte Geschäftslogik läuft in den Objekten, die die Factory erzeugt. Greift ein Objekt auf ein anderes zu, holt es sich entsprechend auch über die (eigene) Factory.
In den Clients gibt es auch eine Factory, die eine bestimmte Menge an Objekten puffern kann und die ggf. wieder verwirft.
Allerdings holt diese die Daten über ein Protokoll vom Server.
Die
GUI-Controls holen sich die Daten aus den Eigenschaften der Objekte, die die Factory bereit stellt.
An der Stelle fällt mir ein, dass das neue LiveBinding dafür nicht taugen wird, da die GUI-Controls jeweils eine ObjektId (z.B. PersonId) und die Factory kennen, bei Bedarf von der Factory ein entsprechendes Objekt abrufen und sich dann selbst an die gewünschte Objekteigenschaft (z.B. Person.FirstName) binden müssen. Insofern wird hier das Konzept meiner bisherigen odControls in ähnlicher Form sinnvoller sein als das (durchaus interessante) LiveBinding.
Die Clients müssten beauftragt werden, sich neu zu zeichnen, wenn im Server Änderungen erfolgen.
Objekte haben einen Zeitstempel, in dem die letzte Änderung gespeichert wird (Uhrzeit auf dem Server). Wenn das lientobjekt den gleichen Zeitstempel hat muss das Objekt nicht neu zum Client übertragen werden.
Ebenso müssen die Clients Datenänderungen natürlich an den Server schicken.
Bis hierher ist mir alles so ziemlich klar und klingt machbar.
Hoffe, dass Ihr mir das nicht alles um die Ohren haut...
Z.B. eine Namensänderung einer Person lässt sich so recht leicht syncronisieren. Wie geht man aber mit komplexen Methodenaufrufen um, die die Geschäftslogik betreffen?
Z.B. könnte es eine Methode geben TStudent.MoveToClass(Class: TClass) geben. Diese Aktion kann ja nicht im Client durchgeführt werden.
Wie gibt man diese denn an den Server weiter? Als Zeichenkette, die der Server dann wieder (per
RTTI?) als Objektmethode ausführt? Dann müsste aber u.U. auch wieder ein Result an den Client geschickt werden (für eine sinnvolle Reaktion der
GUI und Focusänderung)!?
Dann müssten die Objekte jeweils wissen, ob sie sich im Server oder Client befinden. Im Client könnten die Methoden "normal" arbeiten und im Client müssten sie eine Anweisung an den Server schicken.
Gibt es irgendwo Informationen, wie solche Anwendungen arbeiten?