Kiedy stosować MVC

11

Buduję witrynę z PHP i zapleczem MySQL. Ale obecnie nie używam żadnego rodzaju frameworka. Czy powinienem używać kontrolera widoku modelu?

Ryan
źródło
3
Nie musisz używać frameworka, aby użyć wzorca projektowego MVC. Możesz ustrukturyzować własny kod, aby korzystać z MVC.
Amy Anuszewski
5
Pytasz, czy powinieneś używać frameworku, czy ogólnie należy stosować podejście MVC?
Adam Lear

Odpowiedzi:

11

Moja ogólna zasada:

każda strona, która trafi do bazy danych lub wymaga jakiejkolwiek formy wprowadzania danych przez użytkownika, będzie łatwiejsza w zarządzaniu dzięki strukturze MVC.

Nie musisz koniecznie korzystać z całego frameworka, jeśli witryna jest dość prosta, możesz użyć prostej klasy kontrolera strony dla każdej strony, która jej wymaga ( patrz wyżej ). Nie jest to skalowalne rozwiązanie, więc pamiętaj o długoterminowych celach projektu.

Oto ogólny szkic (szybko zhakowanego razem) ustawienia PageController:

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
źródło
3

Powiedziałbym, że dobrze by było, gdyby istniała szansa, że ​​strona może wzrosnąć poza niebanalne rozmiary. Głównym powodem jest to, że zyskujesz lepszą zdolność do zmiany i utrzymywania witryny w przyszłości, a utrzymanie to większość pracy nad większością projektów. Daje to miły podział problemów, organizacji witryny i pomaga uniknąć powtarzalnego i nieporządnego kodu.

MVC to wzór, który jest dobrze znany i akceptowany dla stron internetowych i który pomoże, jeśli zaangażujesz inne osoby do projektu. W tym celu prawdopodobnie chciałbyś wybrać ustalone ramy, aby rozpocząć.

Dozorca więzienny
źródło
1

Nie podałeś żadnych szczegółów, które mogłyby pomóc w udzieleniu odpowiedzi na pytanie, ale moim domyślnym zaleceniem w takim przypadku jest „tak, użyj frameworka MVC”. Wybierz niestandardowe rozwiązanie tylko wtedy, gdy masz pewność, że go potrzebujesz.

Adam Byrtek
źródło
1

Jako architektura MVC koncentruje się na podzieleniu projektu / strony internetowej na wiele części. Może to ułatwić Ci życie, gdy będziesz musiał coś zmienić w kodzie lub interfejsie użytkownika.

Ogólna zasada: jeśli oczekujesz zmian w specyfikacji projektu, zwłaszcza gdy zmiany te wpływają na cały kod, wybierz architekturę, która zmusza cię do rozbicia kodu na małe klocki Lego.

Thanos Papathanasiou
źródło
1

Nie w tym momencie. Poczekaj, aż Twoja witryna stanie się większa i bardziej niechlujna. Zadajesz sobie pytanie - co mogę zrobić, aby rzeczy były mniej nieporządne? Przeczytasz artykuł o MVC i pokochasz go. Nie będziesz już pytać, czy go użyć, czy nie. Będziesz wiedział. To byłby moment, aby zacząć z niego korzystać.

Emanuil Rusev
źródło