Ankündigung

Einklappen
Keine Ankündigung bisher.

MVC Model Daten als Referenz oder Kopie übergeben?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MVC Model Daten als Referenz oder Kopie übergeben?

    Hallo,
    ich arbeite mich z.Z. etwas in das MVC Pattern ein. Dabei stellt sich mir die Frage ob es sinnvoller ist die Daten als Referenz oder als Kopie an den Controller weiter zu geben.
    Hier mal zwei Gerüste:
    PHP-Code:
    class model{
    private 
    $data;

    public function 
    __construct(){
      
    $this -> data //...
      
    }

    public function 
    getData(){
      return 
    $this -> data;
      }
    public function 
    save($data){
      
    $data //speichern
      
    }

    Und einmal mit Referenzen:
    PHP-Code:
    class model{
    private 
    $data;

    public function 
    __construct(){
      
    $this -> data //...
      
    }

    public function &
    getData(){
      return 
    $this -> data;
      }
    public function 
    save(){
      
    $this -> data //speichern
      
    }

    Zu welcher Variante wird in der Praxis gegriffen? Bzw welches von beiden ist zu bevorzugen?
    Ein Klauenhammer ist kein Schraubendreher, auch wenn beide das Problem ,,Schraube-Wand" bidirektional lösen können.

  • #2
    Bitte nicht so rumschmieren deinen Code. Und wenn du uns was zeigen willst, dann mache vernünftigen und funktionierenden Code.

    Im Grunde ist ein Ansatz aber für das MVC-Pattern Unfug. Deine Klasse "model" sind bereits Daten. Darin nochmal ein weiteres Datenarray o.ä. zu speichern (was ist $this->daten denn sonst???) ist nicht Sinn und Zweck der Übung. In aller Regel hast du ein Model Objekt und hast eine "getName()" um eine Kopie (nicht eine Referenz) zu speichern und eine "setName($name)" um einen neuen Namen in das Model zu stellen. Auch hier nicht mit Referenzen arbeiten.

    Damit ergibt sich automatisch, dass save keine Parameter mehr kriegt. Als Controller würdest du immer folgendes machen:
    PHP-Code:
    $model = new model(); // oder wie auch immer
    $model->setName("Neuer Name");
    $model->save(); 
    Es gäbe eine weitere mögliche Schicht, die DAOs (Data Access Objects). Solche kriegen dann Parameter. Da gäbe es dann beispielsweise folgende Variante:
    PHP-Code:
    class UserDAO {
        public static function 
    createUser($username$forname$lastname) {
            
    $user = new UserModel();
            
    $user->setName($username);
            
    $user->setForname($forname);
            
    $user->setLastname($lastname);
            
    $user->insert(); // macht den DB-Insert und speichert die von auto-increment generierte ID
            
    return $user->getUserID();
        }

    Das sieht im ersten Moment überflüssig aus. Aber irgendwann ist ein DAO hübsch und handlich, wenn man komplexere Abläufe sinnvoll kapseln will.

    Die DAOs können auch in der Architektur anders genannt werden mit leicht anderer Zielsetzung. Mancher spricht von Business-Logik und entsprechend von Businness-Services. Andere sprechen von Datenbank-Backend-Logik. Wie auch immer.
    [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
    Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

    Kommentar

    Lädt...
    X