Buduję witrynę z PHP i zapleczem MySQL. Ale obecnie nie używam żadnego rodzaju frameworka. Czy powinienem używać kontrolera widoku modelu?
Buduję witrynę z PHP i zapleczem MySQL. Ale obecnie nie używam żadnego rodzaju frameworka. Czy powinienem używać kontrolera widoku modelu?
Odpowiedzi:
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
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ąć.
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.
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.
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ć.