ควรใช้ MVC เมื่อใด


11

ฉันกำลังสร้างเว็บไซต์ด้วย PHP และ MySQL แบ็กเอนด์ แต่ตอนนี้ฉันไม่ได้ใช้กรอบใด ๆ ฉันควรใช้ Model View Controller หรือไม่


3
คุณไม่จำเป็นต้องใช้เฟรมเวิร์กในการใช้รูปแบบการออกแบบ MVC คุณสามารถจัดโครงสร้างโค้ดของคุณเองเพื่อใช้ MVC
Amy Anuszewski

5
คุณกำลังถามว่าคุณควรใช้เฟรมเวิร์กหรือไม่หรือคุณควรใช้วิธี MVC โดยทั่วไปหรือไม่?
อดัมเลียร์

คำตอบ:


11

กฎง่ายๆของฉัน:

หน้าใดก็ตามที่พบฐานข้อมูลหรือต้องการรูปแบบการป้อนข้อมูลของผู้ใช้จะสามารถจัดการได้ง่ายขึ้นด้วยโครงสร้าง 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

3

ฉันจะบอกว่ามันจะดีถ้ามีโอกาสที่ไซต์อาจเติบโตเกินขนาดที่ไม่สำคัญ เหตุผลหลักคือคุณจะมีความสามารถในการเปลี่ยนแปลงและบำรุงรักษาไซต์ได้ดีขึ้นในอนาคตและการบำรุงรักษาส่วนใหญ่เป็นงานในโครงการส่วนใหญ่ มันช่วยให้คุณมีการแยกแยะความกังวลการจัดระเบียบไซต์และช่วยหลีกเลี่ยงรหัสซ้ำและยุ่งเหยิง

MVC เป็นรูปแบบที่เป็นที่รู้จักและยอมรับสำหรับเว็บไซต์และจะช่วยได้หากคุณนำคนอื่นมาสู่โครงการ ด้วยเหตุนี้คุณอาจต้องการเลือกกรอบงานที่กำหนดไว้เพื่อเริ่มต้น


1

คุณไม่ได้ให้รายละเอียดใด ๆ ที่อาจช่วยตอบคำถาม แต่คำแนะนำเริ่มต้นของฉันในกรณีเช่นนี้คือ "ใช่ใช้กรอบงาน MVC" ไปกับโซลูชันที่กำหนดเองเฉพาะเมื่อคุณแน่ใจจริงๆว่าคุณต้องการมัน


1

ในฐานะที่เป็นสถาปัตยกรรม MVC มุ่งเน้นไปที่การแยกโครงการ / หน้าเว็บของคุณออกเป็นหลายส่วน สิ่งนี้จะทำให้ชีวิตของคุณง่ายขึ้นเมื่อคุณต้องเปลี่ยนบางอย่างในรหัสหรือส่วนต่อประสานผู้ใช้

กฎของหัวแม่มือหากคุณคาดว่าการเปลี่ยนแปลงข้อกำหนดเกี่ยวกับโครงการของคุณโดยเฉพาะอย่างยิ่งเมื่อการเปลี่ยนแปลงเหล่านั้นส่งผลกระทบต่อรหัสทั้งหมดให้ไปกับสถาปัตยกรรมที่บังคับให้คุณแยกรหัสออกเป็นชิ้นเล็ก ๆ เลโก้


1

ไม่ถึงจุดนี้ รอจนกว่าเว็บไซต์ของคุณจะใหญ่ขึ้นและยุ่งเหยิง คุณจะถามตัวเองว่า - ฉันจะทำอย่างไรเพื่อทำให้สิ่งต่าง ๆ ยุ่งน้อยลง? คุณจะอ่านบทความเกี่ยวกับ MVC และคุณจะรักมัน คุณจะไม่ตั้งคำถามว่าจะใช้อีกหรือไม่ คุณจะรู้. นั่นจะเป็นช่วงเวลาที่จะเริ่มใช้มัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.