Design Fragen

Status
Nicht offen für weitere Antworten.

Dunedain

Mitglied
Hallo,

bin vor kurzem in einigen Code Beispielen über AbstractActions gestolpert. Hab mich als Netbeans Matisse Anhänger jedoch noch nie ernsthaft damit befasst, da mir Matisse ja ActionListener serviert^^.
Wenn die implementierte Funktionaliät nicht mehrmals benötigt (Resourcen-Sharing) wird (Menü, Toolbar, Kontextmenü, ...) macht das ja imho keinen großen Unterschied, welchen der beiden man verwendet...?

Oder doch? Gibt es Gründe dafür oder dagegeben, AbstractAction Implementierungen (immer?) einem ActionListener vorzuziehen oder diese zu vermeiden?


Und gleich noch ne Frage hinterher :D. Nach dem MVC Prinzip würden beide, also ActionListener und AbstractAction ja in den Bereich Controller fallen.
Wo implementiere ich diese Klassen? Als InnerClass des Formulars (um Zugriff auf die Formularkomponenten zu erlangen) oder als externe Klasse (und hangle mich dann via
Code:
//Ist improvisiert, d.h.: nicht getestet!
((JComponent)e.getSource()).getParent().getComponent(id).setXXX()
zu der Komponente durch, welche ich verwenden möchte?


Sry, die Fragen sind warscheinlich schwer zu beantworten und vermutlich auch "Geschmackssache". Aber trotzdem, ich bin für jede Meinung offen ;)
 

sliwalker

Top Contributor
Hoi,

bei Punkt eins liegt es daran wie Dein Programm aufgebaut ist und wie oft Du ein und dieselbe Action ausführen willst. Nimmst Du den die "normale" Action, die Dir die Komponente liefert und willst zB von zwei verschiedenen Stellen auf dem GUI ebene diese Action bei einem Event ausführen lassen, kannst Du die behandelnde Routine einmal schreiben und die Komponenten registrieren. Was jetzt aber, wenn beide Komponente in Kombination in einer bestimmten Situation diese Action nicht mehr ausführen können soll? Beide Komponenten suchen und deregistrieren? Und wenn es 20 sind?
Mit einer selbstgeschriebenen Action wäre das ganz einfach möglich.

Nicht zu vergessen das DRY-Prinzip(Dont repeat yourself). Ein und dieselbe Action für 20 Komponenten. Immer wieder an verschiedenen Stellen im ActionListener dasselbe. Undd das in 25 Klassen. Viel Spaß beim Refactoring und beim bugfixen ;)


Zu Punkt 2:
Kommt drauf an :)
Als InnerClass mache ich das nur dann, wenn das "Formular" bzw. die Komponente für mich als abgeschlossene oder sehr spezielle Komponente gilt. Ansonsten kommt das klar in eine eigene Klasse und wird so behandelt, wie Du das beschrieben hast. Die Reaktionen darauf (zB einen Text in einem Textfeld ändern) können dann über verschiedenen Techniken erreicht werden. Interfaces oder Observer. Je nachdem was man machen will halt.

greetz
SLi
 

Wildcard

Top Contributor
Wenn die implementierte Funktionaliät nicht mehrmals benötigt (Resourcen-Sharing) wird (Menü, Toolbar, Kontextmenü, ...) macht das ja imho keinen großen Unterschied, welchen der beiden man verwendet...?
Darum geht es im Prinzip. Wenn du eine Action nur einmal brauchst, ist es eigentlich egal.
Das schöne an einer AbstractAction: wenn dir 3 Monate später auffällt das du Action XY eben doch 2 mal brauchst, musst du keinen Code mehr ändern.
 

Dunedain

Mitglied
Sry, hat mal wieder etwas länger gedauert...
Konnte der Idee mit Observer und Interface nicht ganz nachverfolgen. Einige Google-Recherchen später...

Korrigiert mich, falls ich falsch liege^^
  • Die Daten Klasse (Modell) ist Observable
    [list:1e58ec5d65]
  • Die Connector Klasse (Controller) hält eine Referenz auf das Modell.
  • Es implementiert ein Interface, welches Lese- und Schreibmethoden auf das Modell definiert.
  • Außerdem eine Synchronisationsfunktion, welche die aktuellen Werte an die View(s) übermittelt.
  • Die Gui Klasse (View) ist Observer der Datenklasse.
  • Außerdem hält sie eine Referenz auf den Controller zur Manipulation und Synchronisation der Daten.
  • Die Speicherung der Referenz auf die Datenklasse zur DeRegistrierung als Observer ist nicht zwingend erforderlich(?)....
  • Außerdem werden diverse Listener (DocumentListener, FocusListener, ChangeListener, ...)registriert, welche die GUI Elemente auf Änderungen überwachen. Entsprechende Änderungen werden über den Controller an das Modell weitergegeben.
[/list:u:1e58ec5d65]

Ist das soweit richtig?
Oder sollte die View tatsächlich eine Referenz auf das Modell halten und die Daten direkt aus den Listenern heraus aktualisieren?
Oder sollten die oben in der View beschriebenen Listener alle im Controller implementiert sein und dieser dann die Daten manipulieren (Dadurch würde jede View allerdings einen eigenen Controller benötigen...)?

Tja, Google hat mir zu diesem Thema die oben beschriebenen (und auch noch andere) Lösungsansätze gezeigt. Aber welcher ist nun der richtige?


Davon mal abgesehen, den Weg dieser Bindungen "zu Fuß" zu gehen, machen die Beans- bzw. Swing Bindings doch genau dass, oder?
 

sliwalker

Top Contributor
Hoi,

wie Du es letztendlich realisierst, ist Dir überlassen.
Es gibt da nicht DEN Weg.

Aber ganz grob zum Observer Pattern.
Deine Klasse die beobachtet werden soll ist von Observer abgeleitet. Nach einer Veränderung der Daten, die bekannt gemacht werden soll, rufst Du setChanged(), notifyObservers() clearChanged() oder so auf.

Die Klassen die beobachten, implementieren Observable, was zur Folge hat, dass Du die Methode update(Object, Object) impplementieren musst. Ich gleich das zweite Objekt ist das geänderte Objekt, welches Du beobachtest. Im beobachter musst Du Dich jedoch zuerst beim Observer registrieren.

Ob Du nun in der GUI Klasse die updateMethode hast und die Oberfläche updatest oder ob ein Controller den Beobachter spielt und Du mittels Interfaces die Oberfläche updatest ist wie gesagt Dir überlassen.
Hängt ja auch immer davon ab wieviel arbeit Du Dir machen willst und wie sauber Du es trennen willst.

greetz
SLi
 

Dunedain

Mitglied
Danke, dass ist schonmal sehr aufschlussreich :)

Im Moment geht es mir jedoch nicht um eine konkrete Implementierung, sodern darm, wie man es machen sollte. Das die Wirklichkeit meist anders aussieht, ist ja bei vielen Design- und Planungs Prozessen der Fall... ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D was ist der vorteil vom Builder-design pattern? Java Basics - Anfänger-Themen 11
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
A Frage zum UML Design Java Basics - Anfänger-Themen 1
F Design pattern Java Basics - Anfänger-Themen 29
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
N design time vs build time vs compile time Java Basics - Anfänger-Themen 2
H Eclipse , Design-Modus, unvollständige Darstellung Java Basics - Anfänger-Themen 0
M LookandFeel Design Java Basics - Anfänger-Themen 4
D Design Pattern Command Java Basics - Anfänger-Themen 3
M Erste Schritte Eclipse + design view Java Basics - Anfänger-Themen 3
J Design Patterns Java Basics - Anfänger-Themen 8
Tarrew Proxy Design-Pattern Java Basics - Anfänger-Themen 1
D Besseres Design Frage Java Basics - Anfänger-Themen 1
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
J MVC- Design Frage Java Basics - Anfänger-Themen 3
C Java Klassen Design? Java Basics - Anfänger-Themen 5
OnDemand Software-Design Java Basics - Anfänger-Themen 1
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
B Warum haben Java Programme ein anderes Design? Java Basics - Anfänger-Themen 5
S Singleton (Design Patterns) Java Basics - Anfänger-Themen 16
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
Rudolf OOP Übungen zu Design Pattern in Java Java Basics - Anfänger-Themen 6
K Interface als Instanzvariable = gutes Design Java Basics - Anfänger-Themen 6
S Eclipse Design-Reiter fehlt Java Basics - Anfänger-Themen 6
D Design-Tipps für neues Programm (Excel-Charts-...) Java Basics - Anfänger-Themen 3
M Button mit eigenem Design Java Basics - Anfänger-Themen 6
R Welches Design pattern Java Basics - Anfänger-Themen 10
S Gutes Design mit statischen oder Member-Methoden Java Basics - Anfänger-Themen 53
X Externer GUI Code verwenden / (Design Ansicht) Java Basics - Anfänger-Themen 3
B OOP Frage zu Klassen Design Java Basics - Anfänger-Themen 5
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
J Methoden design Java Basics - Anfänger-Themen 3
hdi Design-Problem Java Basics - Anfänger-Themen 2
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
Q Listen - DefaultListModel trotz Design ueber GUI? Java Basics - Anfänger-Themen 10
B Java-Anwendung im Windows Design Java Basics - Anfänger-Themen 8
hdi Design-Frage: bin unzufrieden Java Basics - Anfänger-Themen 11
M code design Java Basics - Anfänger-Themen 14
M log4j design Java Basics - Anfänger-Themen 11
M Design: Abfrage auf korrekte Eingabe Java Basics - Anfänger-Themen 4
W Design Problem Java Basics - Anfänger-Themen 7
T Wie wichtig ist Design Patterns in einer Firma? Java Basics - Anfänger-Themen 8
M Java Design Frage Java Basics - Anfänger-Themen 2
S log4j "Richtiges" Design Java Basics - Anfänger-Themen 4
D JButton - Design ändern Java Basics - Anfänger-Themen 8
S Frage zum Design der Vererbung (Kartendeck und Dupletten) Java Basics - Anfänger-Themen 12
S Design Frage Java Basics - Anfänger-Themen 5
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
S Diverse Fragen vor Schulaufgabe ;) Java Basics - Anfänger-Themen 4
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
C 3 Fragen rund um Klassenattribute Java Basics - Anfänger-Themen 8
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
NeoLexx Fragen zu diversen Elementen der Javabibliothek Java Basics - Anfänger-Themen 5
D Budget Manager fragen zur Umsetzung Java Basics - Anfänger-Themen 9
N Fragen zur Datenspeicherung Java Basics - Anfänger-Themen 45
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
CT9288 Fragen zu Java Java Basics - Anfänger-Themen 16
W Fragen zu Generics Java Basics - Anfänger-Themen 14
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
J Erste Schritte Oracle Tutorials zu Java 8 - Fragen dazu Java Basics - Anfänger-Themen 1
H Java Quereinsteiger Roadmap und Fragen Java Basics - Anfänger-Themen 29
H fragen Java Basics - Anfänger-Themen 15
M Samelsarium Grundlegender Fragen 2 Java Basics - Anfänger-Themen 9
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
B Java ist / wird kostenpflichtig. Ein paar Fragen Java Basics - Anfänger-Themen 1
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J Wo kann man Fragen zu ireport stellen. Java Basics - Anfänger-Themen 0
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
D Fragen zur Klassen Java Basics - Anfänger-Themen 4
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
D Objekte-Fragen Java Basics - Anfänger-Themen 1
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
Azazel Ein paar Fragen zu Methodenaufrufen(java.awt) Java Basics - Anfänger-Themen 2
S Erste Schritte Fragen zur For-Schleife Java Basics - Anfänger-Themen 9
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
C Fragen zum Spigot Plugin (1.8) Java Basics - Anfänger-Themen 6
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben