Ok, vielen Dank für die Mühe!
Ich hoffe, dass ich Dich nicht nicht überstrapaziere - oder dass ich mich jedenfalls mal irgendwann revangieren kann!
Also implementierst Du Deine Objekte als reine Datenspeicher ohne jegliche Funktionalität, die statt dessen komplett im Manager und den dazu gehörigen Klassen untergebracht wird.
Der Einfachheit halber denke ich mir die Visitor und den Writer mal weg.
Dann werden die Objekte an an den Manager übergeben, der die Eigenschaften der Objekte irgendwo speichert. Ok.
Für die Serverseite ist das für mich soweit verständlich.
Aber wie wird im Client auf Änderungen reagiert?
Z.B. soll ein Edit an PersonWithId1.FirstName gebunden werden. Jeder Tastendruck soll den Personennamen an den Server übertragen und dort in der Datenschicht ändern.
Mit DataBinding sehe ich da keine Möglichkeit. Es gibt ja kein Personenobjekt auf dem Client, an das sich das Edit binden kann.
Das Edit müsste dazu eine Id (1), den gewünschten PropertyNamen ("FirstName") und den ClientManager kennen um bei diesem Manager ein entsprechendes Objekt abzufordern, an das es sich dann binden kann.
Ein Standardedit kann das aber ja nicht.
Somit müsste alternativ die
GUI (z.B. in Form.Show) die Daten vom Server holen und das Edit händisch an die Daten kleben. Und Glue Code will man ja nicht mehr.
Jetzt wird es noch schwieriger...
Änderungen im Edit werden nun an das Personenobjekt im Client geschickt, welches die Änderung brav in FFirstName vermerkt.
Dadurch geht aber doch keine Meldung an den Server!?
Statt dessen müsste doch (soweit ich das bisher durchschaue) das Edit im OnChange etwa folgendes veranlassen:
ClientManager.SetFirstName(PersonWithId1, EditFirstName.Text);
Datasnap schickt den Auftrag dann an den Server, der dann die Änderung vornimmt.
Für jede Klasse und jede Eigenschaft müsste der Manager eine entsprechende Methode bereit halten.
Ist das so?
Ich hoffe nicht!