Wann wird MVC verwendet?

11

Ich baue eine Site mit PHP und einem MySQL-Backend. Derzeit verwende ich jedoch kein Framework. Sollte ich Model View Controller verwenden?

Ryan
quelle
3
Sie müssen nicht unbedingt ein Framework verwenden, um das MVC-Entwurfsmuster zu verwenden. Sie können Ihren eigenen Code strukturieren, um MVC zu verwenden.
Amy Anuszewski
5
Fragen Sie, ob Sie ein Framework verwenden sollten oder ob Sie den MVC-Ansatz im Allgemeinen verwenden sollten?
Adam Lear

Antworten:

11

Meine Faustregel:

Jede Seite, die auf eine Datenbank trifft oder irgendeine Form von Benutzereingabe erfordert, ist mit einer MVC-Struktur einfacher zu verwalten.

Sie müssen nicht unbedingt ein ganzes Framework verwenden. Wenn die Site recht einfach ist, können Sie für jede Seite, die dies erfordert, eine einfache Page Controller- Klasse verwenden ( siehe oben ). Dies ist keine skalierbare Lösung, denken Sie also an die langfristigen Ziele des Projekts.

Hier ist eine grobe Skizze eines (schnell zusammen gehackten) PageController-Setups:

index.php
--------------------------------------------------------

include 'Controller.php';
include 'Db.php';//db connection
include 'View.php';
$Controller = new MyController(new Db(), new View());
$Controller->route($_GET);
$Controller->render();


Controller.php
--------------------------------------------------------
class Controller($db){

    /* ensure all collaborators are provided */
    public function __construct(Db $db, View $view){
         $this->db = $db;
         $this->db->connect(array('host','db','user','pass'));
         $this->view = $view;
    }

    /* load the appropriate model data */
    public function route($_GET){
        //load the right model data and template
        switch($_GET){
            case $_GET['articles'] === 'cats':
                $this->vars = $this->db->get('cats');
                $this->template = 'cats.php';
                break;
            case $_GET['articles'] === 'dogs':
                break;
                $this->vars = $this->db->get('dogs');
                $this->template = 'dogs.php';
            default:
             $this->vars = array();
        }

    } 

    /* render an html string */
    public function render(){
        echo $this->view->render($this->template,$this->vars);
    }

}

View.php
------------------------------------------------------------
class View.php
    {
     /* return a string of html */
     public function render($template,$vars){
            // this will work - but you could easily swap out this hack for 
            // a more fully featured View class
            $this->vars = $vars;
            ob_start();
            include $template;
            $html = ob_get_clean();
            return $html;
         }

     }

template cats.php
--------------------------------------------------------
$html = '';
$row_template = '%name%,%breed%,%color%';
foreach($this->vars as $row){
    $html .= str_replace(
        array(%name%,%breed%,%color%),
        array($row['name'],$row['breed'],$row['color']),
        $row_template);
    }
echo $html;

Db.php
---------------------------------------------------------------
I haven't bothered writing a db class... you could just use PDO
Sunwukung
quelle
3

Ich würde sagen, dass es gut wäre, wenn die Möglichkeit besteht, dass die Website über eine nicht triviale Größe hinaus wächst. Der Hauptgrund ist, dass Sie in Zukunft besser in der Lage sind, die Site zu ändern und zu warten, und dass die Wartung bei den meisten Projekten den größten Teil der Arbeit ausmacht. Es gibt Ihnen eine gute Trennung von Bedenken, Site-Organisation und hilft, sich wiederholenden und unordentlichen Code zu vermeiden.

MVC ist ein Muster, das für Websites bekannt und akzeptiert ist und das hilft, wenn Sie andere Personen in das Projekt einbeziehen. Zu diesem Zweck möchten Sie wahrscheinlich ein etabliertes Framework auswählen, um zu beginnen.

Schlüsselfertig
quelle
1

Sie haben keine Details angegeben, die bei der Beantwortung der Frage hilfreich sein könnten, aber meine Standardempfehlung in diesem Fall lautet "Ja, verwenden Sie ein MVC-Framework". Entscheiden Sie sich nur dann für eine benutzerdefinierte Lösung, wenn Sie wirklich sicher sind, dass Sie sie benötigen.

Adam Byrtek
quelle
1

Als Architektur konzentriert sich MVC auf die Aufteilung Ihres Projekts / Ihrer Webseite in mehrere Teile. Dies kann Ihnen das Leben erleichtern, wenn Sie Änderungen am Code oder an der Benutzeroberfläche vornehmen müssen.

Faustregel: Wenn Sie Änderungen an den Spezifikationen Ihres Projekts erwarten, insbesondere wenn diese Änderungen den gesamten Code betreffen, sollten Sie sich für die Architektur entscheiden, die Sie dazu zwingt, den Code in winzige Legostücke aufzuteilen.

Thanos Papathanasiou
quelle
1

Zu diesem Zeitpunkt noch nicht. Warten Sie, bis Ihre Website größer und unordentlicher wird. Sie werden sich fragen: Was kann ich tun, um die Dinge weniger chaotisch zu machen? Sie werden einen Artikel über MVC lesen und Sie werden es lieben. Sie werden sich nicht mehr fragen, ob Sie es verwenden sollen oder nicht. Du wirst es wissen. Das wäre der Moment, um damit zu beginnen.

Emanuil Rusev
quelle