ฉันกำลังสร้างเว็บไซต์ด้วย PHP และ MySQL แบ็กเอนด์ แต่ตอนนี้ฉันไม่ได้ใช้กรอบใด ๆ ฉันควรใช้ Model View Controller หรือไม่
ฉันกำลังสร้างเว็บไซต์ด้วย PHP และ MySQL แบ็กเอนด์ แต่ตอนนี้ฉันไม่ได้ใช้กรอบใด ๆ ฉันควรใช้ Model View Controller หรือไม่
คำตอบ:
กฎง่ายๆของฉัน:
หน้าใดก็ตามที่พบฐานข้อมูลหรือต้องการรูปแบบการป้อนข้อมูลของผู้ใช้จะสามารถจัดการได้ง่ายขึ้นด้วยโครงสร้าง MVC
คุณไม่จำเป็นต้องใช้เฟรมเวิร์กทั้งหมดหากไซต์นั้นค่อนข้างเรียบง่ายคุณสามารถใช้คลาสตัวควบคุมหน้าอย่างง่ายสำหรับแต่ละเพจที่ต้องการ ( ดูด้านบน ) นี่ไม่ใช่วิธีแก้ปัญหาที่ปรับขนาดได้สำหรับคุณดังนั้นโปรดคำนึงถึงเป้าหมายระยะยาวของโครงการ
ต่อไปนี้เป็นภาพร่างคร่าวๆของการตั้งค่า 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
ฉันจะบอกว่ามันจะดีถ้ามีโอกาสที่ไซต์อาจเติบโตเกินขนาดที่ไม่สำคัญ เหตุผลหลักคือคุณจะมีความสามารถในการเปลี่ยนแปลงและบำรุงรักษาไซต์ได้ดีขึ้นในอนาคตและการบำรุงรักษาส่วนใหญ่เป็นงานในโครงการส่วนใหญ่ มันช่วยให้คุณมีการแยกแยะความกังวลการจัดระเบียบไซต์และช่วยหลีกเลี่ยงรหัสซ้ำและยุ่งเหยิง
MVC เป็นรูปแบบที่เป็นที่รู้จักและยอมรับสำหรับเว็บไซต์และจะช่วยได้หากคุณนำคนอื่นมาสู่โครงการ ด้วยเหตุนี้คุณอาจต้องการเลือกกรอบงานที่กำหนดไว้เพื่อเริ่มต้น
คุณไม่ได้ให้รายละเอียดใด ๆ ที่อาจช่วยตอบคำถาม แต่คำแนะนำเริ่มต้นของฉันในกรณีเช่นนี้คือ "ใช่ใช้กรอบงาน MVC" ไปกับโซลูชันที่กำหนดเองเฉพาะเมื่อคุณแน่ใจจริงๆว่าคุณต้องการมัน
ในฐานะที่เป็นสถาปัตยกรรม MVC มุ่งเน้นไปที่การแยกโครงการ / หน้าเว็บของคุณออกเป็นหลายส่วน สิ่งนี้จะทำให้ชีวิตของคุณง่ายขึ้นเมื่อคุณต้องเปลี่ยนบางอย่างในรหัสหรือส่วนต่อประสานผู้ใช้
กฎของหัวแม่มือหากคุณคาดว่าการเปลี่ยนแปลงข้อกำหนดเกี่ยวกับโครงการของคุณโดยเฉพาะอย่างยิ่งเมื่อการเปลี่ยนแปลงเหล่านั้นส่งผลกระทบต่อรหัสทั้งหมดให้ไปกับสถาปัตยกรรมที่บังคับให้คุณแยกรหัสออกเป็นชิ้นเล็ก ๆ เลโก้
ไม่ถึงจุดนี้ รอจนกว่าเว็บไซต์ของคุณจะใหญ่ขึ้นและยุ่งเหยิง คุณจะถามตัวเองว่า - ฉันจะทำอย่างไรเพื่อทำให้สิ่งต่าง ๆ ยุ่งน้อยลง? คุณจะอ่านบทความเกี่ยวกับ MVC และคุณจะรักมัน คุณจะไม่ตั้งคำถามว่าจะใช้อีกหรือไม่ คุณจะรู้. นั่นจะเป็นช่วงเวลาที่จะเริ่มใช้มัน