MVC – Die Qual der Wahl

17. Jun 2008

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:

  1. <?php
  2. ##Auszug aus einem Controller
  3. function add() {
  4.         if (!empty($this->data)) {
  5.                 $this->data[‘User’][‘salt’] = $this->User->generate_salt();
  6.                 $this->data[‘User’][‘password’] = $this->User->generate_hash($this->data[‘User’][‘password’], $this->data[‘User’][‘salt’]);
  7.                 if ($this->User->save($this->data)) {
  8.                         $this->Session->setFlash(‘User erfolgreich angelegt’,‘default’,NULL,‘success’);
  9.                 } else {
  10.                         $this->Session->setFlash(‘Fehler aufgetreten, bitte korrigieren’,‘default’,NULL,‘error’);
  11.                 }
  12.         }
  13. }
  14.  
  15. #Auszug aus dem dazu passenden Model
  16. function generate_hash($pass = NULL,$user = NULL,$salt = NULL) {
  17.         return md5($salt.$user.$pass);
  18. }

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.

Eine Reaktion zu “MVC – Die Qual der Wahl”

 

  1. Michael Raidel 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

Einen Kommentar schreiben

Du mußt angemeldet sein, um kommentieren zu können.