# Frage bezüglich MVC



## tffasse (13. Mai 2015)

Hey,

da ich mich gerade mit der Entwicklung von GUIs mittels Swing beschäftige, hab ich mich mal an das MVC-Konzept gesetzt. Dabei ist folgendes herausgekommen:

Model:

```
package model;

public class Person {

	private String firstName;
	private String lastName;

	public Person() {}
	public Person(String firstname, String lastname) {
		this.firstName = firstname;
		this.lastName = lastname;
	}

	public Person getPersonById(long id) {
		Person person = new Person();
		person.setFirstName("Max");
		person.setLastName("Mustermann");
		return person;
	}

	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

}
```

Controller:

```
package controller;

import model.Person;

public class PersonController {

	private Person model;

	public PersonController(Person model) {
		this.model = model;
	}

	public Person getModel() {
		return model;
	}

	public void setModel(Person model) {
		this.model = model;
	}

}
```

View:

```
package view;

import controller.PersonController;

public class PersonView {

	private PersonController controller;

	public PersonView(PersonController controller) {
		this.controller = controller;
		this.showDetails();
	}

	private void showDetails() {
		System.out.println("Firstname: " + controller.getModel().getPersonById(1).getFirstName());
		System.out.println("Lastname: " + controller.getModel().getPersonById(1).getLastName());
	}

}
```

Hauptklasse:

```
package main;

import model.Person;
import view.PersonView;
import controller.PersonController;

public class MVCMain {

	public static void main(String[] args) {
		PersonController controller = new PersonController(new Person());
		PersonView view = new PersonView(controller);
	}

}
```

Hab ich das so richtig verstanden? Sollte man beispielsweise im Model nur ein Objekt darstellen und die 'getPersonById' Methode (welche später z.B. die Datenbankabfrage ausführt) in den Controller auslagern oder hat die dort nichts zu suchen?
Ist das auch korrekt, dass ich die Daten in der View vom Controller hole, oder ist es besser, vom Controller aus die View zu bestücken? :bahnhof:

Danke schonmal


----------



## Joose (13. Mai 2015)

tffasse hat gesagt.:


> Sollte man beispielsweise im Model nur ein Objekt darstellen und die 'getPersonById' Methode (welche später z.B. die Datenbankabfrage ausführt) in den Controller auslagern oder hat die dort nichts zu suchen?



Die Methode "getPersonById" hat im Model nichts verloren, das Model ist nur eine Repräsentation deiner Daten. Woher es seine Daten kommen kann dem Model egal sein.
Solche Methode ("getPersonById") würden bei mir in ein DAO ausgelagert und der Controller hat Zugriff auf ein Objekt des "PersonDAO".



tffasse hat gesagt.:


> Ist das auch korrekt, dass ich die Daten in der View vom Controller hole, oder ist es besser, vom Controller aus die View zu bestücken? :bahnhof:



Nein das ist falsch! Dadurch ist deine View vom Controller abhängig. Wenn sich beim Controller etwas ändert wirst du hier deine View nachziehen müssen.
Die Daten sollten vom Controller an die View weitergegeben werden (über eine geeignete Schnittstelle). Stichwort: "Observer Pattern"

Und die Methodenverkettung in deiner View ist sowieso schlechter Code. Was ist wenn "getModel()", "getPersonById()" null zurückliefern?
Dann fliegst du einerseits mit einer NullPointerException und weißt andererseits nicht was sie verursacht. Da in der Zeile 2 Methoden Aufrufe existieren, welche die Exception verursacht haben könnten.


----------

