Hallo allerseits,
dies ist mein erster Thread. Ich lese hin und wieder in diesem netten Forum und kam bisher meistens durch die Suchfunktion und die Themen und Antworten von Euch allen weiter. Danke dafür.
Da ich gerade dabei bin, den Netzwerkzugriff für ein bestimmtes Objekt zu implementieren, kam mir die Idee, den Server möglichst allgemein zu halten, sodass beliebige Objekte im Konstruktor übergeben und damit übers Netzwerk erreicht werden können.
- Der Server hat eine Instanz des Objekts, das manipuliert werden soll. Dieses wird wahrscheinlich im Konstruktor übergeben
- Das Objekt hat einen Zustand und Methoden, um diesen Zustand zu manipulieren. Darüber hinaus gibt es Methoden, die Rückgabewerte haben und nicht den Zustand des Objektes betreffen.
Die Kommunikation ist bis jetzt soweit, dass Methodenaufrufobjekte mit Parametern vom Proxy zum Server gesentet werden können(mit ID) und der Server entsprechende RückgabeObjekte(mit gleicher ID) zurücksenden kann. Das ganze funktioniert in beide Richtungen mit serialisierten Objekten und eigenen "Codecs" fürs De-/Serialisieren.
Nun bin ich an dem Punkt, wo auf der Serverseite aus den "MethodenAufrufObjekten" konkrete Methodenaufrufe werden müssen.
1. Das Erste, was mir dazu einfiel, war Reflection.
- Das bringt mich aber nicht weiter, da Reflection für jeden Methodenaufruf ein neues Objekt erzeugt, und ich damit keine vorhande Instanz benutzen kann. Damit könnte ich also nicht den Zustand meiner konkreten Instanz manipulieren (korrigiert mich, wenn ich hier falsch liege)
2. Hart codierte Methodenaufruflogik à la
3. Konkrete Instanz des Objektes zusammen mit entsprechender Methodenaufruflogik an den Server übergeben (Strategy Pattern). - Also "2." auslagern.
Dadurch bliebe der Server dynamisch für beliebige Objekte.
Was besseres ist mir bisher nicht eingefallen. :noe:
Habt ihr vielleicht eine andere/elegantere Lösung? :toll:
P.S. Die Codeschnipsel sind nur zum Verdeutlichen der Ideen und funktionieren nicht.
dies ist mein erster Thread. Ich lese hin und wieder in diesem netten Forum und kam bisher meistens durch die Suchfunktion und die Themen und Antworten von Euch allen weiter. Danke dafür.
Da ich gerade dabei bin, den Netzwerkzugriff für ein bestimmtes Objekt zu implementieren, kam mir die Idee, den Server möglichst allgemein zu halten, sodass beliebige Objekte im Konstruktor übergeben und damit übers Netzwerk erreicht werden können.
- Der Server hat eine Instanz des Objekts, das manipuliert werden soll. Dieses wird wahrscheinlich im Konstruktor übergeben
- Das Objekt hat einen Zustand und Methoden, um diesen Zustand zu manipulieren. Darüber hinaus gibt es Methoden, die Rückgabewerte haben und nicht den Zustand des Objektes betreffen.
Die Kommunikation ist bis jetzt soweit, dass Methodenaufrufobjekte mit Parametern vom Proxy zum Server gesentet werden können(mit ID) und der Server entsprechende RückgabeObjekte(mit gleicher ID) zurücksenden kann. Das ganze funktioniert in beide Richtungen mit serialisierten Objekten und eigenen "Codecs" fürs De-/Serialisieren.
Nun bin ich an dem Punkt, wo auf der Serverseite aus den "MethodenAufrufObjekten" konkrete Methodenaufrufe werden müssen.
1. Das Erste, was mir dazu einfiel, war Reflection.
Java:
...
Object meineInstanz;
public Object reflectionMethodenAufruf(MethodenAufrufObject methodenAufruf)
{
return Class.forName(meineInstanz.getClass().getName()).getMethod(methodenAufruf.getMethodenName(), methodenAufruf.getParameter());
}
...
- Das bringt mich aber nicht weiter, da Reflection für jeden Methodenaufruf ein neues Objekt erzeugt, und ich damit keine vorhande Instanz benutzen kann. Damit könnte ich also nicht den Zustand meiner konkreten Instanz manipulieren (korrigiert mich, wenn ich hier falsch liege)
2. Hart codierte Methodenaufruflogik à la
Java:
public Object methodenAufruf(MethodAufrufObject methodenAufrufObject)
{
if(methodenAufrufObject.getMethodenName().equals"tuWasMethode")
{
return meineInstanz.tuWasMethode();
}
if...
}
3. Konkrete Instanz des Objektes zusammen mit entsprechender Methodenaufruflogik an den Server übergeben (Strategy Pattern). - Also "2." auslagern.
Dadurch bliebe der Server dynamisch für beliebige Objekte.
Was besseres ist mir bisher nicht eingefallen. :noe:
Habt ihr vielleicht eine andere/elegantere Lösung? :toll:
P.S. Die Codeschnipsel sind nur zum Verdeutlichen der Ideen und funktionieren nicht.
Zuletzt bearbeitet: