Zusammenfassend scheinen fertig zu kaufende Lösungen wie eben RemObjects oder RealThinClient mir (in meinem konkreten Fall) die Arbeit abzunehmen, wie ich jetzt meine Präsentationsschicht mit der Anwendungsschicht verknüpfe?
Die fertig zu kaufenden Lösungen sind aber nicht für alle Architekturen optimal geeignet. RO und RTC sind eher Serveranwendugen, an die sich dann Clients (auch sehr viele Clients) wenden, wenn sie ein Anliegen haben - Request / Response und RPC Kommunikation.
Wenn aber alle Plugins als Clients implementiert werden, die sich an einen zentralen Server andocken sollen, wird dem Serverprozess die gesamte Koordination der Anfragen und das Weitergeben an andere Plugins übertragen. Dazu müssten auch Callbacks implementiert werden, so dass der Server aufgrund der Anfrage eines Plugins aktiv einem anderen Plugin Nachrichten senden kann.
Ich stelle mir als Lösung eher einen sehr schlanken Message Bus vor - eine einheitliche Infrastruktur die allen Plugins gleichberechtigt zur Verfügung steht. Dazu würde ich ein sehr kompaktes Protokoll wie MQTT einsetzen, das gerade für kleine Nachrichten und langsame Netze (schwache Hardware wie Arduino) ausgelegt ist. (
http://mqtt.org/ und
http://mqtt.org/faq)
Jedes Plugin benötigt dann nur eine sehr kompakte und komplett im Prozess integrierte Clientbibliothek, unabhängig von DLLs oder Services wie
DCOM ist. Nur
TCP wird benötigt, zum Beispiel über Synapse das auch sehr schlank ist.
Anwendungen, die die Daten der Plugins visualisieren wollen, lauschen dann entweder auf dem Message Bus und verarbeiten Daten die momentan darüber gesendet werden, oder senden Befehle über den Message Bus an ein Plugin, das daraufhin zum Beispiel Statusdaten an den Sender zurückschickt.
Auch eine Weboberfläche liesse sich damit problemlos anbinden, selbst wenn sie in einer anderen Sprache geschrieben ist, wenn für das Protokoll (z.B. MQTT) bereits entsprechende Clients existieren.
Der wesentliche Unterschied ist, dass es keine Server- und Clientprozesse gibt sondern jedes Plugin aktiv senden und passiv empfangen kann. Das kann man auch nutzen um eine Benutzeroberfläche fernzusteuern, zum Beispiel abhängig vom Status eines Plugins einen Menüpunkt zu aktivieren - das Plugin sendet eine Nachricht wie "Ich bin jetzt aktiviert!" über den Bus. Das
GUI Programm lauscht auf entsprechende Statusnachrichten und schaltet die Menupunkte ein.