Model View Controller Entwurfsmuster!

mrbela

Bekanntes Mitglied
Hey Leute!

Ich habe mal eine Frage zu oben genannten Design pattern...

In wikipedia steht u.a.. dass der View auch das Model (/die Models) kennen muss?!

Stimmt das so? Ich habe im Netz eine IMplementierung gefunden, die das anders macht, aber dennoch reibungslos funktioniert:

Java:
public class Wind extends Observable {
 
    private Direction dir = Direction.NORTH;
    private int speed = 0;
 
    /**
     * @return Returns the dir.
     */
    public Direction getDir() {
        return dir;
    }
 
    /**
     * @param dir The dir to set.
     */
    public void setDir(Direction dir) {
        this.dir = dir;
        setChanged();
        notifyObservers(this);
    }
 
    /**
     * @return Returns the speed.
     */
    public int getSpeed() {
        return speed;
    }
 
    /**
     * @param speed The speed to set.
     */
    public void setSpeed(int speed) {
        this.speed = speed;
        setChanged();
        notifyObservers(this);
    }
}


public class WindViewer extends JFrame implements Observer {
 
    private WindController controller;
    private JLabel direction;
    private JLabel speed;
    private JPanel buttonPanel;
    private JPanel mainPanel;
 
    public WindViewer(WindController controller) {
        super("WindViewer");
        this.controller = controller;
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        init();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
 
    private void init() {
        buttonPanel = new JPanel();
        mainPanel = new JPanel();
        direction = new JLabel();
        speed = new JLabel();
        mainPanel.add(new JLabel("Direction: "));
        mainPanel.add(direction);
        mainPanel.add(new JLabel("Speed: "));
        mainPanel.add(speed);
        getContentPane().add(mainPanel);
 
        JButton button = new JButton("Change Direction");
        button.addActionListener(new ActionListener() {
 
            public void actionPerformed(ActionEvent event) {
                controller.changeDirection();
            }
        });
        buttonPanel.add(button);
 
        button = new JButton("Change Speed");
        button.addActionListener(new ActionListener() {
 
            public void actionPerformed(ActionEvent event) {
                controller.changeSpeed();
            }
        });
        buttonPanel.add(button);
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
    }
 
    /*
     * (non-Javadoc)
     *
     * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
     */
    public void update(Observable arg0, Object arg1) {
        Wind wind = (Wind) arg1;
        direction.setText(wind.getDir().toString());
        speed.setText(String.valueOf(wind.getSpeed()));
    }
}
public class WindController {
 
    private Wind wind;
 
    public WindController() {
        WindViewer viewer = new WindViewer(this);
        wind = new Wind();
        wind.addObserver(viewer);
    }
 
    public void changeDirection() {
        Direction[] dir = Direction.values();
        wind.setDir(dir[(int) (Math.random() * 4)]);
    }
 
    public void changeSpeed() {
        wind.setSpeed((int) (Math.random() * 100));
    }
 
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {
 
            @Override
            public void run() {
                new WindController();
            }
        
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}

Hier agieren die Klassen so, wie es hier zB steht: http://www.se.uni-hannover.de/pub/File/kurz-und-gut/ws2004-seminar-entwurf/mvc_lsinger.pdf (siehe Bild 1. Seite).

In Wikipedia Model View Controller ? Wikipedia ist die Skizze aber eine andere??

Was ist denn richtig?

Oder gibt es verschiedene Arten dies zu implementieren?

Danke!
 

mrbela

Bekanntes Mitglied
Hey!

Das Beispiel hab ich sogar schon im Netz gefunden gehabt. Die arbeiten hier aber nicht mit dem Observer Muster (Observable, Observer etc.)...

Mmmm :/
 
G

Gonzo17

Gast
Entwurfsmuster sind nur "Anleitungen" bestimmte Fälle, die immer wieder auftreten, sauber zu lösen. Im Einzelfall kann es durchaus vorkommen, dass es sinnvoll ist Entwurfsmuster zu ändern oder zu vermischen. Ich würde sagen, dass ein View nicht unbedingt direkt das Model kennen muss. Kann aber Vorteile haben, solange der Zugriff nur lesend ist. Wäre der Zugriff schreibend, dann könnte ein View die Daten direkt ändern und damit wäre das MVC-Prinzip hinfällig.

Die Idee bei MVC ist ja, dass man ein Daten-Modell (Model) hat, das über bestimmte Schnittstellen modifiziert werden kann (Controller). Dazu kann es dann beliebig austauschbare Benutzeroberflächen geben (View). Das macht die ganze Sache ziemlich flexibel, wenn man sich daran hält. Die Frage ist eben immer, ob man das braucht.
 

mrbela

Bekanntes Mitglied
@mrbela:

Ist das für die Uni ? -> Reine Neugier!

Diplomprüfung Informatik... ;)

Da gehts halt auch um Entwurfsmuster... Aber ich werde mich mit einem Treffen, der am Lehrtsuhl arbeitet, der kennt dann die am Lehrstuhl vorherrschende Meinung, die der Prof auch hören möchte... ;)

Dann werd ich ihm genau diese erzählen..

Aber dennoch danke für die Hilfe! Werde mir mal alles reinziehen, was hier gepostet wird!
 
M

maki

Gast
Nebenbei bemerkt, MVC ist nicht wirklich ein Entwurfsmuster bzw. Design Pattern, ist viel zu unspezifisch dafür, ist mehr sowas wie ein Paradigma.
 
G

Gonzo17

Gast
dibbelschisser würd man hier dazu sagen ;)

Aber stimmt schon, wobei ich es trotzdem wie gesagt eher als "Anleitung" sehe. Es wird ja auch kein konkreter Code geliefert. Das sind mehr gedankliche Konstrukte.
 

xote

Mitglied
Also ich muss gestehen, dass mir am meisten das Sun Tutorial zu MVC geholfen hat, um zu verstehen, was da überhaupt gemeint ist. Aber es ist in der Tat nur eine Anleitung. Wie du dann wirklich mit dem ganzen umgehst ist wieder eine andere Sache.

Wie zB Observer und Observable funktionionieren hatte ich ja schnell raus, dafür habe ich aber lange geglaubt, dass im Model Dinge wie Fensterbreiten oder dergleichen definiert werden. Das ist wahrscheinlich einer der Hauptknackpunkte, dass Anfänger nicht so recht wissen, was überhaupt im Model drin ist. Die wenigsten können halt mit "..den Datenzugriff und die Anwendungslogik von der graphischen Darstellungsart trennen" was anfangen.

MVC Tutorial Sun 2007
 
C

C_A

Gast
Ich denke, dass MVC kein Konzept ist, an das man sich sklavisch halten muss. Es gibt zum Beispiel auch unterschiedlcihe Auffassungen darüber, welche Einheit welche Aufgabe im Detail zu erledigen hat.

MVC in seiner "reinsten Form" lässt sich in Java Swing zum Beispiel gar nicht realisieren, ohne Verrenkungen zu machen; hier hat man nur das Model-Delegate, wo View und Controller nicht mehr getrennt werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Model-View-Controller Fail? Allgemeine Java-Themen 31
J Model View Controller Architektur Allgemeine Java-Themen 6
M Java model class ? Allgemeine Java-Themen 9
J Variablen Array ertellen bei model.put Allgemeine Java-Themen 13
Slevin MVC Model Allgemeine Java-Themen 9
P MVC - Frage zu Model Allgemeine Java-Themen 4
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
P Model + ModelInterfaces Allgemeine Java-Themen 10
G Transaction Script, Table- Domain Model Allgemeine Java-Themen 2
B Daten an Tabel Model übergeben Allgemeine Java-Themen 8
G Domain Driven Design Model Allgemeine Java-Themen 14
G Mediator-Model Allgemeine Java-Themen 7
M Model für Dateimanager Allgemeine Java-Themen 3
M In der GUI / im Model auf Webrequest warten? Allgemeine Java-Themen 4
borobudur MVC Model Generator Allgemeine Java-Themen 2
S Model richtig aktualisieren Allgemeine Java-Themen 7
E model.getchild Allgemeine Java-Themen 8
Z JTextField mit Model kommunizieren Allgemeine Java-Themen 6
B View communication eclipse Allgemeine Java-Themen 17
Crashbreaker RCP-View Image öffnen und darstellen Allgemeine Java-Themen 7
B A newer version of Java is needed to view the application. Allgemeine Java-Themen 17
K Immutable View auf StringBuffer? Allgemeine Java-Themen 13
T Pattern: Passive View Allgemeine Java-Themen 2
B MVC: controller in unabhängigen thread von der view starten (gui friert ein) Allgemeine Java-Themen 5
G Trennung View und Control Allgemeine Java-Themen 3
M Frage zur View Klasse des MVC Prinzip Allgemeine Java-Themen 3
O Service oder Controller Allgemeine Java-Themen 6
M Best Practice MVC- Was gehört in den Controller? Allgemeine Java-Themen 1
K Java FX Zu startenden FXML-Controller per Parameter wählen Allgemeine Java-Themen 2
X Controller pro Frame? Allgemeine Java-Themen 8
K GUI-Entwicklung - Dispose, enabling und mehrere Controller Allgemeine Java-Themen 1
D GUI-Controller Konzept Allgemeine Java-Themen 6
O Formularinhalte der jsp in Controller nicht greifbar Allgemeine Java-Themen 2
T MVC - Controller verbessern Allgemeine Java-Themen 9
Y Exception Handling - Controller-Businesslogik-Persitenz Allgemeine Java-Themen 7
G Problem mit MVC-Pattern (Controller als anonyme Unterklasse) Allgemeine Java-Themen 2
N XInput API (DLL für XBox 360 Controller) mit Java benutzen? Allgemeine Java-Themen 3
K MVC - Kommunikation Controller <> Gui Allgemeine Java-Themen 5
D Controller für GUI (MVC) Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben