größeres MVC-Modell

A

AliceSteiner

Gast
Guten Morgän,

ich verstehe einigermaßen den Sinn hinter dem MVC-Modell.

Wie wird das aber gelöst wenn ich mehrere Klassen z.B. mit Datenbankanbindung habe?

Beispiel:

View:

Java:
public class Gui extends JFrame {
 
 private Controller myC = new Controller(this);

public Gui() {
  // Hier kommt die Gui
}
}

Controller:

Java:
public class Controller implements ActionListener {

        private Gui o;
	private Datenbank db = new Datenbank();

        public Controller(Gui view) {
		o = view;
	}
 
A

AliceSteiner

Gast
Java:
public class Datenbank {
     Hier kommt die Datenbankverbindung rein und die Methoden zur Abfrage
}

Jetzt habe ich noch weiter Klassen wie Personen und Abteilungen und soweiter.

Die Objekte lege ich alle in meinem Controller an.
Nun wird es immer wieder vorkommen das Klassen untereinander auf die Methoden zugreifen möchten.
Das ist jetzt teilweise nicht möglich da alle Objekte im Controller erzeugt worden.
Was mache ich wenn ich z.B. von der Datenbankklasse auf Methoden von der Klasse Personen zugreifen möchte. Hier kann ja nur der Controller darauf zugreifen.

Hoffe Ihr versteht mein Problem?

Gruß
Alice
 
A

AliceSteiner

Gast
Danke für das Beispiel.

Verstehe ich das Richtig:
Ich müßte in der Klasse model.java ein Objekt der Klasse DB erzeugen und hier entsprechend die Daten liefern?

Gruß
Alice
 

JanHH

Top Contributor
Die Zugriffe sollten IMMER von oben nach unten stattfinden. Controller greift auf Model zu, aber Model NIE auf Controller. Controller kann Model in Datenbank speichern und aus Datenbank lesen, aber Datenbank greift NIE auf Controller oder Model zu.

Ausserdem ist die Frage, inwieweit man Gui und Controller trennen muss. Oft wird das auch gemeinsam implementiert.
 

GUI-Programmer

Top Contributor
Ausserdem ist die Frage, inwieweit man Gui und Controller trennen muss. Oft wird das auch gemeinsam implementiert.

????? Du weist schon was GUI bedeutet oder? Graphics User Interface beinhaltet den Controller bereits.

Wenn du gemeint hast, dass man die Grafik vom Controller trennen soll, dann gebe ich dir absolut Recht.

Die Zugriffe sollten IMMER von oben nach unten stattfinden. Controller greift auf Model zu, aber Model NIE auf Controller. Controller kann Model in Datenbank speichern und aus Datenbank lesen, aber Datenbank greift NIE auf Controller oder Model zu.

Ja, stimmt, so hab ich das ja auch vorgeschlagen:
Main.java View.java Model.java Controller.java
 

propra

Aktives Mitglied
Hallo zusammen,

verstehe ich deine Zeichnung richtig, dass in der Klasse Main nur das Model und die View erzeugt werden, während der Controller durch die Klasse View instanziiert wird?

Gruß
propra
 

GUI-Programmer

Top Contributor
Hallo zusammen,

verstehe ich deine Zeichnung richtig, dass in der Klasse Main nur das Model und die View erzeugt werden, während der Controller durch die Klasse View instanziiert wird?

Gruß
propra

Ja. Es wäre aber auch umgekehrt genauso richtig, also das in Main nur das Model sowie der Controller erzeugt wird. Dieser erzeugt dann die View.
 
M

MisterX

Gast
Da grätsche ich auch noch rein.

Ich müßte in der Klasse model.java ein Objekt der Klasse DB erzeugen und hier entsprechend die Daten liefern?

Das würde bedeuten das ich im model.java ein Objekt der DB erzeuge.

Da schreibe ich für jede Methode aus der Klasse DB eine gleiche get und set Methode in der Klasse Model????

Wenn ich jetzt zum Beispiel eine Tabelle in der GUI (VIEW) befüllen muss weil ein Button Übersicht angeklickt wurde, muss ich ja aus dem Controller Daten aus dem Model anfordern.

Das geht eigentlich nur über doppelte get und set methoden in model und db.
Oder sehe ich das falsch?
 

JanHH

Top Contributor
Na man kann entweder GUI und Controller als separate Module implementieren (GUI spricht halt mit getter und setter-Methoden mit Controller und Controller führt die Arbeiten durch), als auch diese Trennung aufgeben und alles in eins packen. Was da Sinn macht hängt von der Anwendung ab, würde ich sagen. Es zu trennen macht mehr aufwand aber man kann dann z.B. relativ einfach aus der swing-Anwendung eine Webanwendung machen.

Diese ganze Datenbank-Klasse kommt mir noch komisch vor. Ich würde da mal einen Blick auf JPA werfen ;-).
 

GUI-Programmer

Top Contributor
Das geht eigentlich nur über doppelte get und set methoden in model und db.
Oder sehe ich das falsch?

Es geht auch viel einfacher, nämlich dass es ein "übergeordnetes" Model gibt, z.B. TheBigModel.java :lol:, oder ganz einfach Model.java. Dieses erzeugt dann die anderen Models und hat getter und setter.

Datenbank-Klasse (= ein "Submodel")
Java:
public class Database {
    private Model model;
    public Database(Model model) {
        this.model = model;
    }
    public void saveSomething(/* Some Parameters*/) {
        //irgendein Speichervorgang
    }
}
"Übergeordnetes" Model - das alle anderen Models verwaltet
Java:
public class Model {
    private Database database;
    public Model() {
        database = new Database(this);
        //weiter "Untermodels"
    }
    public Database getDatabase() {
        return database;
    }
    public void setDatabase(Database database) {
        this.database = database;
    }
}
Controller-Klasse
Java:
public class Controller //implementiert die nötigen Eventlistener {
	private View view;
	private Model model;
	public Controller(View view, Model model) {
		this.view = view;
		this.model = model;
	}
	private void saveAll() { //irgendeine Methode, die von einen Listener aufgerufen wird
		model.getDatamodel().saveSomething(/* Some Parameters*/);
	}
}
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben