Konzeptfrage (MVC)

Honkisponk

Mitglied
hi,

also bin grad dabei ein kleines Informationssystem zu schreiben indem man unter anderem ein Adressbuch verwalten kann. Da ich noch keine Erfahrungen mit MVC hab, wollt ich dieses Projekt gleich mal nutzen um damit erfahrungen zu sammeln. Jetzt steh ich aber vor ner Konzept Frage. Und zwar ist das Programm mit lauter JPanels gelöst. Man hat auf der linken seite ein menü und beim drücken der buttons, ändert sich die innere sicht (Hier mal ein Bild)

unbenanntjh.jpg


Ich hab das mit MVC (Model-View-Controller) so verstanden, das ich meine View hab (also die Swing GUI)
mein Model (also die klassen, wie z.B. Kontakt (mit Datenwerten wie name etc.) und einen Controller hab. Der die eingaben in der Gui verwaltet, also z.B. das drücken eines Buttons, das erstellen von Objekten etc. Hab ich das soweit richtig verstanden?

Jetzt aber meine eigentliche Frage. Soll ich nur eine Controller Klasse haben, die alle Button Events behandelt. Oder mehrere? Was ist sinnvoller?

Hoffe jemand kann mir da helfen. Hab keine Lust in so einer frühen Phase nen entscheidenen Fehler zu machen.

(hier mal meine derzeitige Controller Klasse)

Java:
public class ApplicationController implements ActionListener {

	public static final String ADRESSBUCH = "adressbuch";
	public static final String FIRMEN = "firmen";
	public static final String NEU = "neu";
	
	private PersonalOffice personalOffice;
	
	
	public void actionPerformed(ActionEvent e) {
		
		if(e.getActionCommand().equals(ADRESSBUCH)) {
			
			Adressbuch adressbuch = new Adressbuch(this);
			personalOffice.removePanel();
			personalOffice.setPanel(adressbuch);
		}
		if(e.getActionCommand().equals(FIRMEN)) {
			
			FirmenAnlegen firmen = new FirmenAnlegen(); 
			personalOffice.removePanel();
			personalOffice.setPanel(firmen);
		}
		
		if(e.getActionCommand().equals(NEU)) {
			KontaktAnlegen kontaktAnlegen = new KontaktAnlegen();
			personalOffice.removePanel();
			personalOffice.setPanel(kontaktAnlegen);
		}
	}
	
	public void createPersonalOffice()
	{
		this.personalOffice = new PersonalOffice(this);
	}
}

mit freundlichen Grüßen

Honkisponk
 

Firestorm87

Bekanntes Mitglied
Nein es ist wenig Sinnvoll nur eine Controller-Klasse zu haben...

Generell kann man sagen, dass man zu jeder View einen Controller bauen kann/sollte, so dass dieser mit den Eingaben dieser View umgehen kann.
Gerade Models kann man hingegen oft wesentlich öfter wieder verwenden (sinn und zweck der Dinger :p)

In deinem Beispiel eines Telefonbuches würde Ich z.B. eine MainView für den Rahmen des Programmes mit Controller erstellen um dann zusätzlich für die Detailanzeige der Person ein Paar zu erstellen, welche dann mit dem Model der Person gefüllt wird und dann noch eine View mit eigenem Controller für die Suche.
Hier dann ein kleines Model, welches die Suchparameter entgegennimmt und zusätzlich eine Liste aller Personen einblendet, die diesen Parametern entsprechen.
Hier ist es dann geschmackssache, ob man die Ergebnisliste nicht nochmal in eigene View/Controller auslagert, um diese Darstellung (also eine Liste von Personen unabhängig vom Kontext) woanders ebenfalls noch einmal verwenden zu können.

So (jeder Controller hat seine eigene View und kann beliebig viele "Child-Controller" besitzen) hab Ich es zumindest gelernt und fahre damit eigentlich ganz gut...
 

Honkisponk

Mitglied
danke für die schnelle antwort. Hat mir vom verständnis her schonmal sehr viel geholfen. Werd mal schaun ob ich das programmiertechnisch auch so schön hinkriege ;)
 

Honkisponk

Mitglied
Andere Frage:

Entspricht es eigentlich noch dem MVC Muster wenn ich in meiner View Methoden wie diese anbiete?

//View
Java:
public Adresse getAdresse() {
//Adresse ist eine Model Klasse
//Ein Objekt wird mit den Werten aus den TextFeldern erstellt
		return new Adresse(straßeField.getText(), 
						   hausnummerField.getText(), 
						   Integer.parseInt(plzField.getText()), 
						   ortField.getText());
	}

//Model
Java:
public class Adresse {
	
	private String straße;
	private String hausnummer;
	private int plz;
	private String ort;
	
	public Adresse(String straße, String hausnummer, int plz, String ort) {
		super();
		this.straße = straße;
		this.hausnummer = hausnummer;
		this.plz = plz;
		this.ort = ort;
	}
}

Dann ruft der Controller diese Methode auf und so kann ich meine Model Objekte erstellen.

So würde es funtkionieren, aber ich weis nicht ob das so richtig ist.
 

Firestorm87

Bekanntes Mitglied
Nicht wirklich....
Aber was spricht dagegen dein Modell im Controller zu erzeugen?

/EDIT:
Zumal dein Modell schon vorhanden sein sollte wenn die View eröffnet wird, denn was steht sonst in der View drin???
Du kannst die Eingaben ja nicht in ein "null-Model" schreiben :)
 

Honkisponk

Mitglied
Ich kann im Controller ja eine Adresse erzeugen (new Adresse())

aber auf die einzelnen werte zu kommen (die der Benutzer eingegeben hat) müsste ich das doch über lange getter aufrufe machen.

ne, bei mir ist das model noch nicht vorhanden. Wenn ich einen neuen Kontakt anlegen, steht ja noch nichts in den einzelnen feldern.

das MVC bringt mich langsam echt zum verzweifeln ^^.
 

Firestorm87

Bekanntes Mitglied
Ich kann im Controller ja eine Adresse erzeugen (new Adresse())

aber auf die einzelnen werte zu kommen (die der Benutzer eingegeben hat) müsste ich das doch über lange getter aufrufe machen.

ne, bei mir ist das model noch nicht vorhanden. Wenn ich einen neuen Kontakt anlegen, steht ja noch nichts in den einzelnen feldern.

das MVC bringt mich langsam echt zum verzweifeln ^^.
Das ist sinn und zweck einer mvc konstruktion, dass jede eingabe der view DIREKT ins modell geschrieben wird....
 

Firestorm87

Bekanntes Mitglied
Lies dir mal das hier durch: FAQ - MVC Design

/EDIT: Wenn man da wirklich mal mehr mit zutun haben sollte, hab Ich für mich einmal ein kleines MVC-Basisframework geschrieben, welches per Reflection anhand der Namen der Components selbstständig auf die entsprechenden Modellmethoden zugreift.
Macht die folgeentwicklung weiterer MVC-Konstrukte extrem einfach, da man außer bei der Namensgebung komplett losgelöst entwickelt.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Sprachumstellung per Checkbox, Konzeptfrage AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen

Neue Themen


Oben