CakePHP & DIEVOLUTION Blog
MVC - Die Qual der Wahl
Das Model - View - Controller Prinzip ist eine sehr schöne Errungenschaft in der Softwareentwicklung. Waren früher Chaos und Codewüsten an der Tagesordnung, wurde durch objektorientierte Programmierung und eben MVC eine gewisse Eleganz eingeführt. Leider stellt sich mir immer wieder eine Frage: “Gehört dieser Codeblock in das Model, den View oder den Controller?”
Ist eine Anwendung, in der fast nur Model-Dateien mit Code befüllt sind besser wie eine, die hauptsächlich Code im Controller hat? Natürlich nicht, da man ja nicht den Zweck der Anwendung kennt. Wie sieht also guter Programmierstil aus? Nehmen wir ein Beispiel:
-
<?php
-
##Auszug aus einem Controller
-
function add() {
-
$this->data[‘User’][’salt’] = $this->User->generate_salt();
-
$this->data[‘User’][‘password’] = $this->User->generate_hash($this->data[‘User’][‘password’], $this->data[‘User’][’salt’]);
-
if ($this->User->save($this->data)) {
-
$this->Session->setFlash(‘User erfolgreich angelegt’,‘default’,NULL,’success’);
-
} else {
-
$this->Session->setFlash(‘Fehler aufgetreten, bitte korrigieren’,‘default’,NULL,‘error’);
-
}
-
}
-
}
-
-
#Auszug aus dem dazu passenden Model
-
function generate_hash($pass = NULL,$user = NULL,$salt = NULL) {
-
}
Wie wir hier sehen, dient der Controller in diesem Beispiel der Vermittlung. Die einzelnen für den zu speichernden User wichtigen Dinge geschehen im Model. Bei diesem Beispiel ist allerdings die Frage: Sollte man nicht den ganzen User im Model zusammenbasteln? Die Antwort in diesem Fall wäre wohl nein, aus folgendem Grund:
Einen User generiert man immer über die Aktion /users/add, daher wäre wohl die einzige Stelle, an der man einen Modelaufruf add_user machen würde, in dieser Aktion. Generell sollte man allerdings alles, was in irgendeiner Form direkt mit der Datenbank zu tun hat, im dafür vorgesehen Model-Teil speichern. So sind auch Zugriffe aus anderen Controllern einfacher zu bewerktstelligen, nicht nur in Cake.
Zusammengefasst:
- Ins Model gehört alles, was mit der Datenbank zu tun hat
- In den Controller gehört die Geschäftslogik, d.h. die ausführenden Kommandos
- In den View gehört NUR die Ausgabe, die allerdings in Controller und Model dafür auch nichts zu suchen hat.
Veröffentlicht am Dienstag, den 17. Juni 2008 um 15:14 Uhr veröffentlicht
Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.
Eine Reaktion zu “MVC - Die Qual der Wahl”
-
Am 17. Juni 2008 um 21:21 Uhr
Ich würde den Code für Salt und Passwort in das Model nehmen, weil Methoden von $this->User mehrfach aufgerufen werden und die add#Methode des Controllers damit stark an das Model gekoppelt ist. Außerdem würde ich den Code dem Model zuordnen, da das Model wissen sollte, ob schon ein Salt vorhanden ist oder ob noch einer generiert werden muss (zB auch beim Ändern des Passworts). Ein guter Artikel zum Thema ist http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model
Auf einen Blick
Archiv
- November 2008
- Oktober 2008
- August 2008
- Juli 2008
- Juni 2008
- Mai 2008
- April 2008
- März 2008
- Februar 2008
- Januar 2008
- Dezember 2007
- November 2007
- Oktober 2007
- September 2007
- August 2007
- Juli 2007
- Juni 2007
- Mai 2007
- April 2007
Kategorien
- Allgemein (72)
- Cake vs Rails (3)
- CakePHP (42)
- Meinung (16)
- Projekt (6)
- Rails (6)
- Tipps (28)
- Typo3 (4)
Letzte Einträge:
- 11.04.2007: Neustart
- 11.04.2007: Design Version 1 steht
- 11.04.2007: Blog