Design Pattern #8

Autor: NathalieOhneHerz GitHub

Das MVC Pattern

Modell, Kontrolle und Ansicht aufgeteilt.

Hauptartikel: [Design Pattern #1] Was sind die Design patterns


Im Folgenden soll das MVC Pattern genauer beleuchtet werden.


Was ist das MVC Pattern und wann verwendet man es?

Das MVC Pattern lässt sich klar in die Kategorie der Strukturmuster einordnen. Es hat eine Hauptaufgabe: Teilaspekte eines Programmes von einander zu trennen. Eine saubere Trennung von Komponenten erhöht Skalierbarkeit und reduziert den Wartungsaufwand. Auch die Wiederverwendbarkeit steigert sich enorm. Das MVC Pattern wird vor allem in vielen PHP Frameworks angewandt. Ein zu lobendes Beispiel sei dabei CakePHP. Nach dem MVC Pattern sollte man ein Programm nach folgenden Komponenten trennen:


Model

Das Model stellt in der Regel ein Objekt da. Das kann ein "normales" Objekt sein, aber genauso gut ein POJO. Es ist dazu da, alle geforderten Daten bereitzustellen und Zugriff auf sie zu ermögliche.


View

Im View sollen alle Daten, die das Model bereitstellt dargestellt werden. Hier erfolgt die Präsentation nach außen hin.


Controller

Hier erfolgt sowohl die Trennung zwischen Model und View als auch die Kommunikation zwischen beiden. Der Controller reguliert die Daten im Model und hält den View stets auf dem neuesten Stand.


Modellierung


Implementierung in Java

package de.nathalieoneill.devtek.mvc; /** * @author Nathalie */ public class DevTekUser { private String name; private String email; private int age; public DevTekUser(String name, String email, int age) { this.name = name; this.email = email; this.age = age; } public String getEmail() { return email; } public String getName() { return name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setEmail(String email) { this.email = email; } public void setName(String name) { this.name = name; } }
package de.nathalieoneill.devtek.mvc; /** * @author Nathalie */ public class DevTekUserView { public void presentData(String userName, String userEmail, int userAge) { System.out.println("You can contact " + userName + "(" + userAge + ") with " + userEmail); } }
package de.nathalieoneill.devtek.mvc; /** * @author Nathalie */ public class DevTekUserController { private final DevTekUser user; private final DevTekUserView userView; public DevTekUserController(DevTekUser user, DevTekUserView userView) { this.user = user; this.userView = userView; } public String getUserName() { return this.user.getName(); } public String getUserEmail() { return this.user.getEmail(); } public int getUserAge() { return this.user.getAge(); } public void setUserName(String userName) { this.user.setName(userName); } public void setUserEmail(String userEmail) { this.user.setEmail(userEmail); } public void setUserAge(int userAge) { this.user.setAge(userAge); } public void updateUserView() { this.userView.presentData(user.getName(), user.getEmail(), user.getAge()); } }

Die Verwendung sähe dann so aus:

package de.nathalieoneill.devtek.mvc; /** * @author Nathalie */ public class DevTek { public static void main(String[] args) { final DevTekUser user = DevTek.loadUser(); final DevTekUserView userView = new DevTekUserView(); final DevTekUserController userController = new DevTekUserController(user, userView); userController.updateUserView(); /* Birthday */ user.setAge(100); userController.updateUserView(); } public static DevTekUser loadUser() { return new DevTekUser("Nathalie", "trash@tash.tsh", 99); } }

Ich hoffe, dass ich euch das MVC Pattern näher bringen konnte.

Mit freundlichen Grüßen
Nathalie