Sto costruendo un sito con PHP e un backend MySQL. Ma al momento non utilizzo alcun tipo di framework. Dovrei usare Model View Controller?
La mia regola empirica:
qualsiasi pagina che colpisce un database o richiede qualsiasi forma di input dell'utente sarà più facile da gestire con una struttura MVC.
Non è necessario necessariamente disporre di un intero framework, se il sito è abbastanza semplice, è possibile utilizzare un semplice Controller di pagina per ogni pagina che lo richiede ( vedi sopra ). Questa non è una soluzione scalabile, bada bene, quindi ricorda gli obiettivi a lungo termine del progetto.
Ecco un abbozzo di una configurazione di PageController (rapidamente hackerata insieme):
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
Direi che sarebbe positivo se ci fosse la possibilità che il sito potesse crescere oltre una dimensione non banale. La ragione principale è che si ottiene una migliore capacità di cambiare e mantenere il sito in futuro e la manutenzione è la maggior parte del lavoro sulla maggior parte dei progetti. Ti offre una buona separazione di preoccupazioni, organizzazione del sito e aiuta a evitare codice ripetitivo e disordinato.
MVC è un modello ben noto e accettato per i siti Web e questo ti aiuterà se porti altre persone nel progetto. A tal fine, probabilmente vorrai scegliere un framework stabilito per iniziare.
Non hai fornito dettagli che possano aiutarti a rispondere alla domanda, ma in questo caso la mia raccomandazione predefinita è "sì, usa un framework MVC". Vai con una soluzione personalizzata solo quando sei veramente sicuro di averne bisogno.
Come architettura, MVC si concentra sulla suddivisione del tuo progetto / pagina web in più parti. Questo può semplificarti la vita quando dovrai modificare qualcosa nel codice o nell'interfaccia utente.
Regola empirica, se ti aspetti cambiamenti nelle specifiche del tuo progetto specialmente quando queste modifiche influenzano l'intero codice, quindi vai con l'architettura che ti obbliga a suddividere il codice in piccoli pezzi lego.
Non a questo punto. Aspetta che il tuo sito diventi più grande e più disordinato. Ti chiederai: cosa posso fare per rendere le cose meno disordinate? Leggerai un articolo su MVC e lo amerai. Non ti starai chiedendo se usarlo o meno. Lo saprai. Quello sarebbe il momento di iniziare ad usarlo.
Leggi altre domande sui tag web-applications mvc