Feine Englische Art?

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hi,

ich bin gerade dabei ein kleines Streitgespräch mit meinem Azubi-Kollegen auszutragen. Es geht darum, ob es "ethisch" vertretbar ist auf einen Button einer anderen Klasse einen ActionListener zu adden. Also im Prinzip so

Code:
public class Klasse1 extends JFrame implements ActionListener {

    ...
    private Klasse2 kl2 = null;
    ...

    public Klasse1() {

        ...
        kl2 = new Klasse2();
        kl2.getOK().addActionListener(this);
        ...
    }

    ...

    public void actionPerformed(ActionEvent evt) {

        if (evt.getSource() == kl2.getOK()) {
            // reagier darauf
        }
    }
}

Code:
public class Klasse2 extends JFrame {

    ...
    private JButton ok = null;
    ...

    public Klasse2() {

        ...
        ok = new JButton("OK");
        ...
    }

    public JButton getOK() {
        return ok;
    }
}

.

Und da wir uns nicht einigen konnten, habsch mir gedacht frag ich mal hier nach ;) . Danke für eure Antworten.
 

Wildcard

Top Contributor
Natürlich ist das vertretbar, nach MVC oft sogar der richtige Weg, da ein Controller die Events verarbeiten soll.
Dein Beispiel ist allerdings daneben, da dein 'Controller' auch ein JFrame ist.
 
R

Roar

Gast
wenn klasse2 so blöt ist und den button allen anderne klassen zugänglich macht, muss klasse2 damit rechnen, dass klasse1 am button rumpfuscht. wenn man das nicht machen soll, entfern halt die getOK() methode ;-)
ob das moralisch vertretbar ist, muss der autor von klasse2 entscheiden. wenn der sich für eine getOK() methode entscheidet ist das nicht der fehler von autos von klasse1 wenn er mit dem button anstellt was er will :D
 

foobar

Top Contributor
Was soll das bringen? Ausser Verwirrung bei dem jenigen der den Code später warten darf/muß.
 

The_S

Top Contributor
Also für mich ist das net unbedingt vertretbar. Da entsteht imho nur Wurstelcode. Und irgendwo kann ich auch net glauben dass das so wirklich schön ist.

@Wildcard

Ist halt genau so gedacht, mit z. B. zwei JFrames. Deswegen meine Frage :) .

Trotzdem würde ich gerne noch weitere Meinungen hören.
 

Illuvatar

Top Contributor
Ich würde wenn dann Delegatenmethoden einführen, also "addOKButtonActionListener" oder so. Aber egal, wie egal welcher ActionListener geadded wird, Blup extends JFrame implements ActionListener != MVC.
 

Leroy42

Top Contributor
Bevor ich sowas progge, würde ich der Klasse, die diesen Button anbieten will.
ein Interface verpassen, über den bei Drücken des Buttons, die andere Klasse
als eine Art Listener benachrichtigt wird.
 

SnooP

Top Contributor
aber das implements ActionListener impliziert einen gleichzeitigen Controller in der selben Klasse - sprich View+Controller... das spricht gegen MVC, auch wenn es bei kleinen Oberflächen imho nicht sträflig ist, sowas zu machen... wichtiger ist imho, dass das Modell getrennt ist.
 

byte

Top Contributor
In diesem Fall kümmert sich der Listener aber nicht um die Kommunikation zwischen Model und View sondern zwischen View und View. Demnach ist es doch kein Controller nach dem MCV-Prinzip. Oder habe ich eine goldene Regel übersehen die da lautet: Listener dürfen ausschließlich als Controller zwischen Model und View fungieren? ;)

Edit: Wenn natürlich in der actionPerformed() auch noch das Model involviert ist, dann ist das Ganze natürlich Käse. :roll:
 

Wildcard

Top Contributor
SnooP hat gesagt.:
aber das implements ActionListener impliziert einen gleichzeitigen Controller in der selben Klasse - sprich View+Controller... das spricht gegen MVC
Ganz so tragisch ist es nicht wenn View und Controller zusammenwachsen (wirklich entkoppeln kann man die praktisch nie). Fast alle Swing Klassen sind sowohl Controller als auch View.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben