Einzelnen Beitrag anzeigen

Benutzerbild von t2000
t2000

Registriert seit: 16. Dez 2005
Ort: NRW
236 Beiträge
 
Delphi 12 Athens
 
#8

AW: Interface Methode als Parameter übergeben

  Alt 26. Jul 2022, 12:22
Hier nochmal ein paar Hintergründe dazu.
Ich nutze verschiedene TMS REST-Server. Die Schnittstelle auf der Clientseite ist pro Server eine Unit mit einem Interface, welches Funktionen des REST-Servers zur Verfügung stellt. Diese Funktionen hab ich auf der Serverseite programmiert und wird vom Client aufrufen.

Eine Funktionsschnittstelle als Beispiel (Definition/Deklaration auf Server und Client verfügbar):
Delphi-Quellcode:
  IPubFunc = interface(IInvokable)
    ['{FBA5E9E9-87FC-4501-A10E-757218094BF8}']

    function InstallEvent ( const Param: TJSONObject) : TJSONObject; // Para: ProducerID, ProducerName, Eventname
    function UninstallEvent ( const Param: TJSONObject) : TJSONObject; // Para: EventID, Force
    function SubscribeEvent ( const Param: TJSONObject) : TJSONObject; // Para: EventID, SubscriberID, Important, Priority, CallbackURL
    function UnsubscribeEvent( const Param: TJSONObject) : TJSONObject; // Para: EventID, SubscriberID
    function CancelSubscriber( const Param: TJSONObject) : TJSONObject; // Para: SubscriberID
    function FireEvent ( const Param: TJSONObject) : TJSONObject; // Para: EventID, Data
  end;

Am Client habe ich einen XDataClient.
xClient : TXDataClient; // =TMS-Object Dieser hat eine Funktionsschnitstelle
Delphi-Quellcode:
var
  xPubFunc : IPubFunc;
begin
  xPubFunc := xClient.Service<IPubFunc>;
Wenn ich nun die unterschiedlichen Funktionen aufrufen möchte habe ich (bei mir) ca. 20 Zeilen Overhead.
Darin befindet sich dieser Aufruf
json := xPubFunc.InstallEvent(jsonPara); wobei "json" und "jsonpara" jeweils TJSONObject Variablen sind.

Da alle Aufrufe der unterschiedlichen REST-Server und auch der unterschiedlichen Funktionen identisch sind (Errorhandling, Datenkonvertierung, usw), wäre eine einzelne Funktion für alle Aufrufe sehr hilfreich. Dynamisch sind ja nur der JSON-Parameter und das jeweilige Interface mit der entsprechenden Funktion.

Soviel mal zum Hintergrund. Die TMS Sourcen möchte ich natürlich nicht ändern. Das ganze läuft soweit super gut.

Ich werde jetzt mal eure Hinweise durchgehen und das eine oder andere ausprobieren.

Viele Dank schon mal.

Thomas
Thomas
(Wir suchen eine(n) Entwickler(in) mit Ambitionen später ggf. die Softwarefirma zu leiten)
Aktuell nicht mehr. Aber ab vielleicht 2024/2025 wird das wieder sehr interessant!
  Mit Zitat antworten Zitat