Korrekter Aufbau für Interfaces in RCP?

antimon

Mitglied
Hallo zusammen,

mir ist nicht ganz klar, welche der folgenden Methoden die vernünftigste bzw. einzig richtige ist, ein Interface für eine RCP-Anwendung aufzubauen.

Es gibt folgende Aufgabenstellung:
Zwei Bundles sollen miteinander agieren, und zwar eines, das Verbindungen verwaltet und eines, welches Daten über eine Schnittstelle versenden und empfangen kann.
Das Bundle für die Verbindungsverwaltung definiert einen Extension Point mit dem Interface für die Methoden connect() disconnect() sowie sendPacket(String), worüber ein Schnittstellen-Plugin z.B. die Verbindung zur seriellen Schnittstelle öffnen, schließen, sowie Daten versenden kann.

Nun kommen aber auch Daten von aussen über die Schnittstelle rein, die irgendwo behandelt werden müssen, des weiteren kann die Verbindung plötzlich beendet werden (wenn man z.B. statt einer seriellen Schnittstelle TCP/IP verwendet) - und jetzt kommen die Möglichkeiten:

a) Erweitere ich das Interface der Verbindungsverwaltung um die Methoden addPacketListener(IPacketListener), removePacketListener(IPacketListener), addStateListener(IConnectionStateListener) sowie removeStateListener(...)

oder ist folgendes besser:

b) Ich definiere einen zweiten Extension Point im Schnittstellen-Bundle, über das sich andere Bundles einklinken können, wenn sie Pakete empfangen oder über Änderungen am Verbindungszustand informiert werden möchten?

Funktioniert Fall b) überhaupt, wenn das Verbindungs-Verwaltungs-Plugin auch Änderungen am Verbindungszustand mitbekommen soll? Denn eigentlich ist Plugin 1 ja dann von Plugin 2 abhängig und umgekehrt...

Oder gibt es eine noch elegantere Lösung als die beschriebenen?

Vielen Dank schon mal!
 
Also mal aus dem Bauch raus ist Variante a) denke ich sinnvoller oder?

Noch was anderes: Bei OSGI werden ja Packages freigegeben, auf dessen Klassen dann von anderen Bundles direkt zugegriffen werden kann. RCP baut ja auf OSGI auf, aber manche Dinge werden dort anders behandelt. Wenn man sich daran strikt halten möchte, ist es dann noch erlaubt, auf die Klassen zuzugreifen, oder muss der komplette Datenaustausch über Interfaces gehandhabt werden (was meiner Meinung nach um einiges komplexer wäre, sofern das überhaupt immer geht)? Eine "lose Kopplung" wäre ja sicher nicht schlecht, aber ist wohl nicht immer einfach umzusetzen... rentiert es sich, da viel Mühe zu investieren?
 
Zurück