AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C/S mit Objekten - Grundsatzfrage

Ein Thema von stahli · begonnen am 20. Sep 2012 · letzter Beitrag vom 4. Okt 2012
 
Benutzerbild von stahli
stahli

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

C/S mit Objekten - Grundsatzfrage

  Alt 20. Sep 2012, 23:15
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?
Angehängte Grafiken
Dateityp: jpg csoop.jpg (29,3 KB, 55x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz