Ben PHP ve MySQL arka uç ile bir site inşa ediyorum. Ancak, şu anda herhangi bir çerçeve kullanmıyorum. Model View Controller'ı kullanmalı mıyım?
Ben PHP ve MySQL arka uç ile bir site inşa ediyorum. Ancak, şu anda herhangi bir çerçeve kullanmıyorum. Model View Controller'ı kullanmalı mıyım?
Yanıtlar:
Temel kuralım:
bir veritabanına çarpan veya herhangi bir kullanıcı girişi gerektiren herhangi bir sayfanın bir MVC yapısı ile yönetilmesi daha kolay olacaktır.
Her zaman bir çerçeve ile gitmeniz gerekmez, site oldukça basitse, gerektiren her sayfa için basit bir Sayfa Denetleyicisi sınıfı kullanabilirsiniz ( yukarıya bakın ). Bu ölçeklenebilir bir çözüm değil aklınızda - projenin uzun vadeli hedeflerini aklınızda bulundurun.
İşte (hızla birlikte saldırıya uğrayan) PageController kurulumunun kaba bir taslağı:
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
Sitenin önemsiz olmayan bir boyutun ötesine geçme şansı varsa iyi olacağını söyleyebilirim. Ana nedeni gelecekte siteyi değiştirmek ve korumak için daha iyi bir yetenek kazanmak ve bakım çoğu projedeki çalışmaların çoğu. Endişelerin, site organizasyonunun güzel bir şekilde ayrılmasını sağlar ve tekrarlayan ve dağınık kodlardan kaçınmaya yardımcı olur.
MVC, web siteleri için iyi bilinen ve kabul edilen bir modeldir ve projeye başkalarını getirmenizde yardımcı olacaktır. Bu amaçla, muhtemelen başlamak için yerleşik bir çerçeve seçmek istersiniz.
Soruyu cevaplamaya yardımcı olabilecek herhangi bir ayrıntı vermediniz, ancak bu durumda varsayılan önerim "evet, bir MVC çerçevesi kullanın". Özel bir çözümle yalnızca gerçekten ihtiyacınız olduğundan emin olduğunuzda gidin.
Bir mimari olarak MVC, projenizi / web sayfanızı birden çok parçaya ayırmaya odaklanır. Bu, koddaki veya kullanıcı arayüzündeki bir şeyi değiştirmeniz gerektiğinde hayatınızı kolaylaştırabilir.
Temel kural, özellikle bu değişiklikler tüm kodu etkilediğinde projenizle ilgili spesifikasyonlarda değişiklik bekliyorsanız , kodu küçük lego parçalarına ayırmaya zorlayan mimariye gidin.
Bu noktada değil. Siteniz daha büyük ve daha karışık hale gelene kadar bekleyin. Kendinize soracaksınız - işleri daha az dağınık hale getirmek için ne yapabilirim? MVC ile ilgili bir makale okuyacak ve çok seveceksiniz. Artık kullanıp kullanmayacağınızı sorgulamayacaksınız. Bileceksiniz. Bu onu kullanmaya başlama zamanıdır.