Michael, danke für den Tipp. Das Buch habe ich heute (in deutsch) bestellt und darf vor dem Kauf auch nochmal rein schauen.
Aber mal noch eine grundsätzliche Frage zur Realisierung über DataSnap.
Ich würde in meinem Client ein Panel verwenden, das (wie im Bild) einen Schüler darstellt. Durch Doppelkick soll eine Funktion Student.SwipNames(Age:Integer):Boolean aufgerufen werden, die den Vornamen und Nachnamen vertauscht und ein Alter zuweist (auch wenn das natürlich recht sinnfrei ist).
Implementiert wäre das etwa so:
Delphi-Quellcode:
function TStudent.SwipNames(Age_:Integer): Boolean;
var
S: String;
begin
S := FirstName;
FirstName := LastName;
LastName := S;
Result := (Age <> Age_);
Age := Age_;
end;
In einer Desktopanwendung würde PanelStudent, wenn es das Student-Objekt kennt ja einfach die Methode aufrufen und gut ist.
Über DataSnap würde ja eine Persistentklasse registriert (hier mal TSchool), die im Client und Server bekannt ist.
Jetzt kann der Client Methoden von TSchool ausführen, die DataSnap zum Server weiter leitet.
Von TStudent direkt können aber keine Methoden ausgeführt werden - oder?
Also müsste man eine neue Funktion
TSchool.Student_SwipNames(Student: TStudent; Age_:Integer): Boolean
bzw.
TSchool.Student_SwipNames(StudentId: Integer; Age_:Integer): Boolean
einführen, der das Student-Objekt oder dessen Id übergeben wird und die dann die eigentliche Funktion ausführt. Richtig?
Das PanelStudent dürfte dann beim Doppelklick nicht die StudentObjekt-Methode ausführen, sondern die School-Methode auf dem Server starten.
Aber es dürfte keine Methode eines im Client instanziierten Student-Objektes ausgeführt werden. Das StudentObjekt müsste sich also unterschiedlich verhalten, je nachdem ob es im Client oder auf dem Server instanziiert wurde.
Oder gibt man an den Client nur reine Datenobjekte ohne jede Geschäftslogik?
Ich komme da zu keinem Schluss...
Funktioniert das so? Bzw. wo liege ich daneben? Wie kommt das Result zurück zum Client?
Wie sieht ein Setter (z.B. set_FirstName) eines TStudent-Objektes im Client aus? Dort klassisch Value an FFirstName zuzuweisen macht ja keinen Sinn...
Gibt es dazu Infos?
(Sonst finde ich Demos und Erklärungen zu DataSets, die für meinen Anwendungsfall ja nicht passen.)