Anwendungs-Design (Plugin-Architektur)

Status
Nicht offen für weitere Antworten.

AlArenal

Top Contributor
Ich hab mal ne eher allgeime Problemstellung.

Ich habe eine selbstentwickelte Anwendung, die könnt ihr euch vielleicht ähnlich wie Visio vorstellen. Ich habe also grafische Objekte, die ich per Drag&Drop in eine Arbeitsfläche ziehen und dort verbinden kann.

Jedes dieser grafischen Objekte hat eine eigene Klasse als Grundlage, das Ganze kann ich derzeit in XML speichern und laden, später kommt noch die Anbindung an ein System hinzu, um die Objekte mit Daten aus dem System zu verknüpfen. Nun wird es analog zu Visio verschiedene Bibliotheken mit grafischen Objekten geben.

Soweit sogut.

Problem:
Beim Laden/Speichern und Sachen wie dem Anzeigen von kontekxt-sensitiven Popup-Menüs müss ich ja immer die Objektliste des Dokuments durchlaufen und mit einem ellenlangen if(instanceof)-else-Zweig spreche ich die Methoden der verschiedenen Klassen an.

Nun möchte ich das Ganze nach Möglichkeit dahingehend entzerren, dass irgendwo in einer Liste oder ähnlichem eine Zuordnung zwischen Klasse und Methoden festgelegt werden kann, die in den verschiedenen Fällen aufgerufen werden sollen, nach Möglichkeit so, dass ich nicht für jedes neue grafische Objekt überall den if-else-Zwei erweitern muss. Am elegantesten wäre eine Art Plugin-Architektur, so dass eine neue Bibliothek einzeln verschickt und eingefügt werden kann, anstatt da jeweils ne kundenspezifische Version zu der kompletten Anwendung zu backen.

Ich dachte mir, sowas sei vielleicht über Reflection machbar, aber mir fehlt irgendwie noch die kritische Masse im Kopf, ehe es "klick" macht. Vielleicht hat von euch ja mal ne Idee?
 
B

Beni

Gast
Interfaces ?

Ich hab vor einigen Wochen was ähnliches geschrieben, und kann da mit gutem Gewissen sowas in diese Richtung empfehlen:

Code:
public interface GraphicObject{
  public void paint( Graphics g );

  public GraphicFactory getOrigin(); // woher dieses Objekt kommt

  public void write( XMLWriter writer );  // was auch immer der XML-Writer sein soll...

  public void read( XMLReader reader ); // wie auch immer der XML-Reader implementiert ist...
}

Und vielleicht noch eine zentrale Klasse, bei der man Factories anmelden kann:
Code:
public interface GraphicFactory{
  public GraphigObject createNewInstance();

  public ContextMenuInformation getContextMenuInformation( GraphicObject obj );
}
Code:
public class GraphicCenter{
  public void register( String name, GraphicFactory factory ){ ... }
}

Es geht nur um eines: die "Plugins" können ihre neuen Features irgendwo registrieren, und dein Progi klappert dann diese Listen ab. Da es Interfaces sind, muss man nicht zwischen verschiedenen Klassen unterscheiden.
Bei meinem Programm, das sehr auf Plugins ausgelegt ist, sind mindestens 25% aller *.java-Dateien Interfaces...
 

KSG9|sebastian

Top Contributor
ich hoffe mal das ich dich richtig verstanden hab..!

wie wär es mit vererbung ?
du machst eine Superklasse, von mir aus "Koerper" und dann erzeugst du die Objekte mit

Koerper K = new Schrank()

und dann kannst du mit K.methodeABC() ja immer die gleiche Methode aufrufen und brauchst nicht für jeden neuen Körper alles neu machen!
 

AlArenal

Top Contributor
@beni:

Ich mache es im Grunde ähnlich. Das Dokument hat eine Methode zum Laden und eine zum Speichern von XML, kann sich also selbst in XML (de-)serialisieren. Dazu läuft es intern durch die Liste aller Objekte, stellt fest welche Klasse es ist, macht nen cast und ruft dann die XML-Laden/-Speichern-Methode in dem jeweiligen Objekt auf. Dazu implementieren diese auch ein Interface, welches die beiden Methoden definiert.

Da könnte ich im Grunde per Reflection fragen ob das Object das Interface implementiert und wenn ja, ebenfalls über Reflection die passende Methode aufrufen? Das sollte doch eigentlich funzen, oder? Damit hätte ich den Part schonmal abgefrühstückt..

Das mit der Factory muss ich mir mal durch den Kopf gehen lassen und Bücher wälzen, damit mir das prinzipiell etwas klarer wird. Hölle, ich muss mal was essen...


@KSG9|plak:

Die Objekte kommen im Grunde von einer Superklasse, aber ich habe auch noch die Verbindungen und andere Sachen in dem Dokument, kann also nicht stillschweigend davon ausgehen, dass alles im Dokument von derselben Klasse abgeleitet ist. Zumal ich nie weiß, was mein Chef sich als nächstes ausdenkt, von daher versuche ich gleich etwas variabler zu sein... was mal mehr und mal weniger gut gelingt ;)
 

AlArenal

Top Contributor
Laden/Speichern über Reflection funzt wie geplant prima. Allerdings muss ich fürs Laden noch ne Hashtable von Hand pflegen, die eine Zuordnung zwischen einem XML-Tag und der Klasse des zugehörigen Objekts vornimmt, weil ich ja schon wissen muss welche Klasse ich brauche um ein Objekt zu erzeugen.

Das wäre f+ür später vielleicht noch ein Ansatzpunkt für einen Plugin-Mechanismus, diese Hashtable ebenfalls dynamisch zu erzeugen...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
S ArrayList Design Allgemeine Java-Themen 4
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
Kirby.exe Framework für Game Design Allgemeine Java-Themen 8
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
M Diverse Design-Fragen Allgemeine Java-Themen 6
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
T OOP Fehler im Design Allgemeine Java-Themen 9
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
R Parameter Adapter - Design Allgemeine Java-Themen 1
D Bezüglich Design meines Codes Allgemeine Java-Themen 1
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Java Design Frage Allgemeine Java-Themen 10
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
P Auf die Anzahl der Joins achten beim WS design Allgemeine Java-Themen 1
M OOP Design Frage Allgemeine Java-Themen 2
J Domain Driven Design - Modellierungsfrage Allgemeine Java-Themen 3
F Welches Design Pattern? Allgemeine Java-Themen 3
H MVC Design Allgemeine Java-Themen 9
J Swing Eigenes Button-design Allgemeine Java-Themen 2
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
A Sinnvolles Software Design bei Eigenschaftsänderungen von Objekten Allgemeine Java-Themen 7
C Gutes Code Design (3 Schichten Modell) Allgemeine Java-Themen 19
D Design Stations-Gitter Allgemeine Java-Themen 4
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
G Design Patterns für Programm Allgemeine Java-Themen 3
I Wie populär ist Design by Contract in Java und was haltet ihr davon? Allgemeine Java-Themen 5
Landei Design-Problem Formel-Parser Allgemeine Java-Themen 10
J Aktionen im State-Design-Modell Allgemeine Java-Themen 3
S Design Oberfläche Allgemeine Java-Themen 2
L Design-Frage: Platzierung der Save-Methode Allgemeine Java-Themen 3
G Domain Driven Design Model Allgemeine Java-Themen 14
G konkretes Domain Driven Design Aggregate Allgemeine Java-Themen 2
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
B Design Problem Allgemeine Java-Themen 8
faulelotte Verständnisproblem Domain Driven Design Allgemeine Java-Themen 3
S Frage zum Design der Datenstruktur Allgemeine Java-Themen 10
D design gesucht - Angabe von zu ersetzenden substrings Allgemeine Java-Themen 2
D Design ohne Getter und Setter Allgemeine Java-Themen 8
D Design: on-the-fly-Parsing + Datenstrukturen Allgemeine Java-Themen 5
N Welches design pattern? Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
T Design-Frage Allgemeine Java-Themen 14
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
S JToolBar Design Allgemeine Java-Themen 3
M Bildersyncronisierung - Design Patterns? Allgemeine Java-Themen 2
T Design - Exception in Thread Allgemeine Java-Themen 3
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
M Frage zum Design :: allgemein Allgemeine Java-Themen 6
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
U Frage zu DB Design Allgemeine Java-Themen 3
K Design / Implementierung Allgemeine Java-Themen 5
N Checkstyle - Design for Extension Allgemeine Java-Themen 4
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
E Was ist ein gutes Design fuer meine Programm? Allgemeine Java-Themen 3
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
P Apple Design Allgemeine Java-Themen 5
S design frage Allgemeine Java-Themen 10
T Design-Tipp gesucht Allgemeine Java-Themen 2
M Design von Java Klassen Allgemeine Java-Themen 2
G java design von klassen und projekten Allgemeine Java-Themen 6
K Design: Klassen in Pakete aufteilen - Eure Meinung Allgemeine Java-Themen 8
S Programmierstil / design Allgemeine Java-Themen 9
S Exception design Allgemeine Java-Themen 2
m@nu Exception-Design Allgemeine Java-Themen 4
R Design-Frage Allgemeine Java-Themen 9
N Hilfe beim Design Allgemeine Java-Themen 13
D Design Pattern: Singleton Allgemeine Java-Themen 4
Torres Design-Problem mit Jakarta Struts Allgemeine Java-Themen 2
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Meeresgott Best Practice MVC mit Plugin-Feature Allgemeine Java-Themen 4
J Application mit PLugin erweitern Allgemeine Java-Themen 2
T Eclipse IDE Plugin Error Log Allgemeine Java-Themen 0
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
D Bradley Local Thresholding plugin imagej Allgemeine Java-Themen 6
A Best Practice Java - eine Art Plugin-Struktur Allgemeine Java-Themen 3
M eigenes Seekarten-Tool (oder PlugIn?) Allgemeine Java-Themen 2
J Java code "plugin" fähig machen Allgemeine Java-Themen 4
P Find Bugs plugin Allgemeine Java-Themen 2
C BlackBox-Framework - Plugin Programmierung Allgemeine Java-Themen 4
F Framework/Plugin für Tree-Darstellung in Graph Allgemeine Java-Themen 0
F Parser Framework/Plugin für Datei in Custom-Format Allgemeine Java-Themen 2
Joew0815 Best Practice Wie am besten Plugin-System erstellen? Allgemeine Java-Themen 12
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
M ImageJ: Mit PlugIn Weichzeichnungsfilter schreiben Allgemeine Java-Themen 9
X Java Plugin Befehle Allgemeine Java-Themen 2
O Plugin perfomrant implementieren Allgemeine Java-Themen 12
Y PlugIn für ImageJ Allgemeine Java-Themen 2
B Java Plugin schreiben Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben