Modularisierung / Architektur / Wizards

Alles zu NetBeans als RCP-Platform

Moderator: wegus

Antworten
someDude
Beiträge: 8
Registriert: 12.09.2013, 19:27

Modularisierung / Architektur / Wizards

Beitrag von someDude » 22.09.2013, 11:27

Verehrte Leser,

ich bitte um euren Rat, wie ich folgendes mit Netbeans RCP umsetzen kann - loosely coupled und erweiterbar natürlich ;)

Meine Desktop-RCP-App ist ein Konfigurationstool für bestimmte Steuergeräte. Diese Steuergeräte unterscheiden sich z.B. in Anzahl und Art ihrer Bus- und IO-Schnittstellen.
Nach AppStart kann der Benutzer auswählen, welches Ziel-Steuergerät er konfigurieren will.

Es gibt immer (mindestens) 2 Wizards, Wizard "Schnittstellen" und Wizard "IO-Verhalten", die in der App unter den gleichen "Einstiegspunkten" - ein Button und ein Menü-Eintrag erreichbar sein sollen.
Der "Menü-->Schnittstellen - Wizard" sieht für jedes Ziel-Steuergerät unterschiedlich aus, und wird je nach gewähltem Ziel-Steuergerät ersetzt.
Für den "Button-->IO-Verhalten - Wizard" ist die Art und Anzahl der Schnittstellen des zu konfigurierenden Ziel-Steuergeräts relevant.
Insgesamt: Steuergeräte bieten ihren eigenen Schnittstellen-Wizard. Art- und Anzahl der Steuergeräte-Schnittstellen wirken sich auf den IO-Verhalten-Wizard aus.

Wie setzt man dies jetzt geschickt um, ohne an diversen Stellen
switch(ZielSteuergerät) {
case FOO: ... break;
case BAR: ... break; }
zu schreiben und außerdem können diverse noch unbekannte Ziel-Steuergeräte dazu kommen?


Mein erster Ansatz:
Ein API-Modul "SchnittstellenWizardServiceAPI" (Netbeans-Platform-Modul).

Jedes unterstützte Ziel-Steuergerät hat unter anderem ein Modul "SchnittstellenWizardServiceProvider", das die o.g. API implementiert und sich per entsprechender Annotation im globalen Lookup registriert. *?)

Die Core-App hat eine Dependency auf das API-Modul und ein Modul "SchnittstellenWizardClient" mit einer "Schnittstellen_WizardAction"-Klasse.
In deren Konstruktur holt sie sich im globalen Lookup den aktuell gewählten *??) SchnittstellenWizardServiceProvider.
Im Grunde müsste dieser dann einen - je nach Ziel-Steuergerät entsprechend aufgebauten - WizardDescriptor ausliefern, der in der "actionPerformed()" der "Schnittstellen_WizardAction" ausgeführt würde.

Ist das so möglich? Geht's besser / einfacher? Welche Probleme hol ich mir dadurch ins Boot?

*?) ist das treffend formuliert?
*??) Das klappt eigentlich nur, wenn immer nur ein SchnittstellenWizardServiceProvider vorhanden ist - wie kann ich das sicherstellen?


Netbeans RCP Praxis:
Derzeit habe ich alles als ein Netbeans Platform App - Projekt aufgesetzt, und bräuchte schon für das Wizard-Problem 4 Module.
Die verschiedenen Wizards sind nur ein Aspekt von vielen, in dem sich die Zielsteuergeräteunterscheiden - zB wird für das eine Steuergerät selbst Code erzeugt, während für das andere ein externes Programm via CommandLineInterface angesprochen angesteuert wird.
Es wäre mir daher lieber ich könnte für die Core-App ein eigenes NetbeansPlatformApp-Projekt machen und die Zielsteuergeräte-spezifischen Module jeweils in ihre eigene Modul-Suite packen:
NetbeansPlatformApp: Core
- Modul: SchnittstellenWizardServiceAPI
- Modul: SchnittstellenWizardClient

NetbeansModuleSuite: ZielSteuergeraet_FOO
- Modul: SchnittstellenWizardServiceProvider

NetbeansPlatformApp: Zielsteuergeraet_BAR
- Modul: SchnittstellenWizardServiceProvider

Ist das möglich so möglich oder wie würdet ihr's machen?

Vielen Dank im Voraus für euren Rat, Tipps und Anregungen!

Antworten