Estou construindo um site com PHP e um back-end MySQL. Porém, atualmente não estou usando nenhum tipo de estrutura. Devo estar usando o Model View Controller?
Estou construindo um site com PHP e um back-end MySQL. Porém, atualmente não estou usando nenhum tipo de estrutura. Devo estar usando o Model View Controller?
Respostas:
Minha regra de ouro:
qualquer página que acesse um banco de dados ou exija qualquer forma de entrada do usuário será mais fácil de gerenciar com uma estrutura MVC.
Você não precisa necessariamente seguir uma estrutura inteira; se o site for bastante simples, você poderá usar uma classe simples do Controlador de Páginas para cada página que precisar ( veja acima ). Esta não é uma solução escalável, lembre-se dos objetivos de longo prazo do projeto.
Aqui está um esboço de uma configuração do PageController (rapidamente hackeada):
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
Eu diria que seria bom se houver uma chance de o site crescer além de um tamanho não trivial. O principal motivo é que você ganha maior capacidade de alterar e manter o site no futuro e a manutenção é a maior parte do trabalho na maioria dos projetos. Ele oferece uma boa separação de preocupações, organização do site e ajuda a evitar códigos repetitivos e confusos.
O MVC é um padrão conhecido e aceito por sites e que ajudará se você atrair outras pessoas para o projeto. Para esse fim, você provavelmente desejaria escolher uma estrutura estabelecida para começar.
Você não forneceu detalhes que possam ajudar a responder à pergunta, mas minha recomendação padrão nesse caso é "sim, use uma estrutura MVC". Escolha uma solução personalizada apenas quando tiver certeza de que precisa.
Como arquitetura, o MVC se concentra em dividir seu projeto / página da Web em várias partes. Isso pode facilitar sua vida quando você precisar alterar algo no código ou na interface do usuário.
Como regra geral, se você espera alterações nas especificações do seu projeto, especialmente quando essas alterações afetam o código inteiro, siga a arquitetura que o força a dividir o código em pequenos pedaços de lego.
Não neste momento. Aguarde até o site ficar maior e mais confuso. Você se perguntará - o que posso fazer para tornar as coisas menos confusas? Você lerá um artigo sobre MVC e vai adorar. Você não estará questionando se deve usá-lo ou não. Você saberá. Esse seria o momento de começar a usá-lo.