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.
Kategorie: Allgemein, Meinung | 1 Kommentar »
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.
